注意:master执行本部分所有操作
node节点执行(2、安装 kubelet、kubeadm、kubectl) 和 (3、下载镜像)操作
1、版本查看
[root@master ~]# yum list kubelet --showduplicates | sort -r
1.20.4是文章编辑时的最新版本!
2、安装 kubelet、kubeadm、kubectl
2.1 开始安装
[root@master ~]# yum install -y kubelet-1.20.4 kubeadm-1.20.4 kubectl-1.20.4
若不指定版本直接运行“yum install -y kubelet kubeadm kubectl”则默认安装最新版即1.20.4,两种命令效果一致。
2.2安装包说明
- kubelet 运行在集群所有节点上,用于启动Pod和容器等对象的工具
- kubeadm 用于初始化集群,启动集群的命令工具
- kubectl 用于和集群通信的命令行,通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件
2.3 启动kubelet、并设置开机自启动
[root@master ~]# systemctl enable kubelet && systemctl start kubelet
2.4 kubelet命令补全
[root@master ~]# echo "source <(kubectl completion bash)" >> ~/.bash_profile
[root@master ~]# source .bash_profile
3、下载镜像
3.1 创建镜像下载脚本
Kubernetes几乎所有的安装组件和Docker镜像都放在goolge自己的网站上,直接访问可能会有网络问题,这里的解决办法是从阿里云镜像仓库下载镜像,拉取到本地以后改回默认的镜像tag。
创建脚本文件kimage.sh以及脚本内容:
[root@master ~]# vi kimage.sh
#!/bin/bash
url=registry.cn-hangzhou.aliyuncs.com/google_containers
version=v1.20.4
images=(`kubeadm config images list --kubernetes-version=$version|awk -F '/' '{print $2}'`)
for imagename in ${images[@]} ; do
docker pull $url/$imagename
docker tag $url/$imagename k8s.gcr.io/$imagename
docker rmi -f $url/$imagename
done
注意:“version=版本号” 根据自己Kubernetes安装的版本修改;url为阿里云镜像仓库地址。
赋予脚本 kimage.sh的执行权限
[root@master ~]# chmod u+x kimage.sh
3.2 开始下载镜像
执行脚本 kimage.sh
[root@master ~]# ./kimage.sh
查看下载好的镜像
[root@master ~]# docker images
4、初始化Master
4.1 初始化
[root@master ~]# kubeadm init --apiserver-advertise-address 192.168.56.11 --pod-network-cidr=10.244.0.0/16
apiserver-advertise-address指定master的IP地址192.168.56.11;
pod-network-cidr指定Pod网络的范围(和宿主机没关系,无需修改),这里使用flannel网络方案;
执行成功的最后会有一段类似的输出:
kubeadm join 192.168.56.11:6443 --token m8vk8h.4a1usim3kkdg2duc \
--discovery-token-ca-cert-hash sha256:21ce98935f223bce7b25b235666b125d83b8b4e70d457b8b77db419c648b7c03
记录下来,后面需要这个命令将各个node节点加入集群中。
4.2 加载环境变量
[root@master ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
[root@master ~]# source .bash_profile
5、安装pod网络
[root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
6、master节点配置
6.1删除master节点的默认污点
taint:污点的意思。如果一个节点被打上了污点,那么pod是不允许运行在这个节点上面的;
默认情况下集群不会在master上调度pod,如果偏想在master上调度Pod,可以执行如下操作
查看污点:
[root@master ~]# kubectl describe node master|grep -i taints
Taints: node-role.kubernetes.io/master:NoSchedule
删除默认污点:
[root@master ~]# kubectl taint nodes master node-role.kubernetes.io/master-
node/master untainted
再次查看污点:
[root@master ~]# kubectl describe node master|grep -i taints
Taints: <none>
污点已删除;
参考:https://blog.51cto.com/3241766/2405624