使用kubeadm安装kubernetes
计算机名 | IP地址 | 操作系统及内核版本 |
---|---|---|
k8s-master.mfyxw.com | 192.168.80.100 | CentOS7.6内核推荐:4.4+及以上 |
k8s-node1.mfyxw.com | 192.168.80.110 | CentOS7.6内核推荐:4.4+及以上 |
k8s-node2.mfyxw.com | 192.168.80.120 | CentOS7.6内核推荐:4.4+及以上 |
- 各节点均需要都关闭selinux和防火墙firewalld,并把防火墙自启取消
命令:
#设置关闭selinux和防火墙,立即生效
setenforce 0 && systemctl stop firewalld && systemctl disable firewalld - 各节点均需要修改hosts文件
命令:
vi /etc/hosts
192.168.80.100 k8s-master.mfyxw.com k8s-master
192.168.80.110 k8s-node1.mfyxw.com k8s-node1
192.168.80.120 k8s-node2.mfyxw.com k8s-node2 - 各节点均需要把内核升级到4.4+及以上版本,CentOS 7.x 系统自带的 3.10.x 内核存在一些 Bugs,导致运行的 Docker、Kubernetes 不稳定
命令:
uname -r
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
yum -y install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
//查询有哪些可以更新到哪些内核版本
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
//安装4.4.X内核 --enablerepo 选项开启 CentOS 系统上的指定仓库。默认开启的是 elrepo,这里用 elrepo-kernel 替换。
yum -y install --enablerepo=elrepo-kernel install kernel-lt
//查询到本机都安装了哪些内核版本
awk -F\‘ ‘$1=="menuentry " {print i++ " : " $2}‘ /etc/grub2.cfg
grub2-set-default 0 //设置默认内核使用的版本 也可以编辑/etc/default/grub 文件,把GRUB_DEFAULT=0中的0修改为对应查询到的内核的序号
//或使用命令:grub2-set-default ‘CentOS Linux (4.4.197-1.el7.elrepo.x86_64) 7 (Core)‘
reboot //重启系统,使新内核启动
再次确认是否更新到最新版本的内核
uname -r
4.各节点均需要安装iptables,因为kube-proxy会向iptables或者ipvs写规则
命令:
#安装iptables服务
yum -y install iptables-services
#清空防火墙规则并保存
命令:
iptables -F
service iptables save
#启动iptables并设置开机启动
命令:
service iptables status
service iptables start
systemctl enable iptables
5.各节点均需要下载docker-ce的repo文件放置/etc/yum.repo.d/目录下
如没有wget命令,请先使用yum -y install wget来安装
命令:
cd /etc/yum.repos.d
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
6.各节点均需要在/etc/yum.repo.d/目录下新建一个kubernetes.repo文件
命令:
vi /etc/yum.repos.d/Kubernetes.repo
内容如下:
[Kubernetes]
name=Kubernetes repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enable=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
7.各节点均需要安装docker-ce,kubeadm,kubelet,kubectl
命令:
yum -y install docker-ce kubeadm kubectl kubelet
8.各节点均需要docker镜像加速器(建议)
命令:
mkdir /etc/docker
vi /etc/docker/daemo.json
{
"registry-mirrors": ["https://jltw059v.mirror.aliyuncs.com"]
} - 各节点均需要把docker和kubelet加入开机自启并启动docker
命令:
systemctl enable docker && systemctl enable kubelet && systemctl start docker
ps aux | grep docker
10.各节点均需要检查cat /proc/sys/net/bridge/bridge-nf-call-ip6tables和cat /proc/sys/net/bridge/bridge-nf-call-iptables的值是否都为1,如果不是,请按如下方法修改
命令:
cat /proc/sys/net/bridge/bridge-nf-call-ip6tables
cat /proc/sys/net/bridge/bridge-nf-call-iptables
cat <<EOF >/etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
11.在k8s-master节点新建一个sh脚本
命令:
vi k8s-master.sh
脚本内容如下:
#!/bin/bash
K8S_VERSION=v1.16.2
ETCD_VERSION=3.3.15-0
PAUSE_VERSION=3.1
DNS_VERSION=1.6.2
FLANNEL_VERSION=v0.11.0-amd64
#pull镜像到本地
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:$K8S_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:$K8S_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:$K8S_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:$ETCD_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:$K8S_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$DNS_VERSION
docker pull quay-mirror.qiniu.com/coreos/flannel:$FLANNEL_VERSION
#修改tag,因k8s默认找镜像的时候,会去k8s.gcr.io/coredns:XXXXX查找
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:$K8S_VERSION k8s.gcr.io/kube-apiserver:$K8S_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:$K8S_VERSION k8s.gcr.io/kube-scheduler:$K8S_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:$K8S_VERSION k8s.gcr.io/kube-controller-manager:$K8S_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:$ETCD_VERSION k8s.gcr.io/etcd:$ETCD_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:$K8S_VERSION k8s.gcr.io/kube-proxy:$K8S_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION k8s.gcr.io/pause:$PAUSE_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$DNS_VERSION k8s.gcr.io/coredns:$DNS_VERSION
docker tag quay-mirror.qiniu.com/coreos/flannel:$FLANNEL_VERSION quay.io/coreos/flannel:$FLANNEL_VERSION
给k8s-master.sh脚本添加执行权限
chmod 755 k8s-master.sh
./k8s-master.sh
12.查询下是否镜像下载完成
命令:
docker images -a
13.在各node节点上新建一个k8s-node.sh脚本文件,
vi /root/k8s-node.sh
添加如下内容
#!/bin/bash
K8S_VERSION=v1.16.2
PAUSE_VERSION=3.1
DNS_VERSION=1.6.2
FLANNEL_VERSION=v0.11.0-amd64
#pull镜像到本地
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:$K8S_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$DNS_VERSION
docker pull quay-mirror.qiniu.com/coreos/flannel:$FLANNEL_VERSION
#修改tag
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:$K8S_VERSION k8s.gcr.io/kube-proxy:$K8S_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION k8s.gcr.io/pause:$PAUSE_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$DNS_VERSION k8s.gcr.io/coredns:$DNS_VERSION
docker tag quay-mirror.qiniu.com/coreos/flannel:$FLANNEL_VERSION quay.io/coreos/flannel:$FLANNEL_VERSION
给/root/k8s-node.sh脚本添加可执行权限并执行脚本
命令
chmod 755 /root/k8s-node.sh
14.在各node节点上查看下载的镜像
.
15.在各节点上,把swap交换空间给关闭
命令
swapoff -a //立即生效
编辑配置文件使开机自动不开启交换空间
vi /etc/fstab在swap交换分区前面添加#号注释
16.在k8s-master节点上使用kubeadm初始化(kubernetes版本使用1.16.2是因为在下载镜像下载了此镜像版本)
命令
kubeadm init --kubernetes-version=1.16.2 --pod-network-cidr 10.244.0.0/16 --service-cidr 10.96.0.0/12
注意:kubernetes要求最低需要双核CPU(master和node节点都需要双核)
节点k8s-master成功完成了初始化
kubeadm join 192.168.80.100:6443 --token tlxsrq.7cilafwfvxh09k7z \
--discovery-token-ca-cert-hash sha256:8145748aa23b2563580c39065dde084863b59202c209a4566ac2df377b9f66b3
因为是做实验,故使用root用户来运行,不切换到普通用户运行如下命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
17.查看pod节点和node节点
命令:
kubectl get pods -n kube-system
kubectl get nodes
在查看node上显示NotReady(未就绪状态)是由于flannel没有启动
在flannel的github(https://github.com/coreos/flannel)上说到,kubernetes1.7+以上需要使用如下命令来运行flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
flannel已经运行,再次查看nodes和pods -n kube-system
18.在各node节点上运行如下命令加入集群
命令:
kubeadm join 192.168.80.100:6443 --token tlxsrq.7cilafwfvxh09k7z \
--discovery-token-ca-cert-hash sha256:8145748aa23b2563580c39065dde084863b59202c209a4566ac2df377b9f66b3
19.再次在k8s-master节点上运行如下命令查询集群所有节点情况
命令:
kubectl get nodes
原文:https://blog.51cto.com/7309656/2446761