1、kubernetes管理节点部署
1.1、部署主机
- YN101-22.host.com
1.2、初始化管理节点
导出配置文件
cd /usr/local/kubernetes/cluster
kubeadm config print init-defaults --kubeconfig ClusterConfiguration > kubeadm.yml
修改配置文件
advertiseAddress: 192.168.101.20 #修改为本机IP地址
imageRepository: registry.aliyuncs.com/google_containers #使用阿里云仓库
podSubnet: "10.244.0.0/16" #添加该行配置,pod所在网段为我们虚拟机不重叠的网段(这里用flannel默认网段)
kubernetesVersion: v1.15.0 #检查版本是否一致,更改为下载版本
#配置文件末尾添加以下配置,默认的调度方式改为ipvs模式
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
featureGates:
SupportIPVSProxyMode: true
mode: ipvs
查看所需安装的镜像
kubeadm config images list --config kubeadm.yml
各镜像作用
registry.aliyuncs.com/google_containers/kube-apiserver:v1.16.0 #网关,提供restfull风格的api
registry.aliyuncs.com/google_containers/kube-controller-manager:v1.16.0 #控制器管理,自动重启pod
registry.aliyuncs.com/google_containers/kube-scheduler:v1.16.0 #调度
registry.aliyuncs.com/google_containers/kube-proxy:v1.16.0 #代理
registry.aliyuncs.com/google_containers/pause:3.1 #暂停
registry.aliyuncs.com/google_containers/etcd:3.3.15-0 #服务注册与发现
registry.aliyuncs.com/google_containers/coredns:1.6.2 #域名解析服务器
拉取所需镜像
kubeadm config images pull --config kubeadm.yml
执行初始化命令,该命令指定了初始化时需要使用的配置文件,其中添加--experimental-upload-certs参数可以在后续执行加入节点时自动分发证书,追加的tee kubeadm-init.log用以输出日志。
kubeadm init --config=kubeadm.yml --experimental-upload-certs | tee kubeadm-init.log
注意: 如果没有提前下载镜像,这条命令执行时会卡在[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'大概需要2分钟,请耐心等待。安装k8s版本和下载的镜像版本不统一则会出现time out waiting for the condition错误,中途失败或是想修改配置可以使用kubeadm reset命令重置配置,在初始化操作。
安装完后,会提示你输入如下命令,复制粘贴过来,执行即可。
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
上面kubeadm init执行成功后会返回给你node节点加入集群的命令,等会要在node节点上执行,需要保存下来,如果忘记了,可以使用如下命令获取
kubeadm token create --print-join-command
查看是否初始化成功
kubectl get node
显示以上结果,说明初始化成功,当前状态为NotReady,因为未进行网络配置。
2、kubernetes工作节点部署
2.1、部署主机
- YN101-31.host.com
- YN101-32.host.com
2.2、node节点加入集群
将master节点初始化后返回的加入集群命令在node节点中执行,命令如下(示例):
kubeadm join 192.168.101.22:6443 --token abcdef.0123456789abcdef
--discovery-token-ca-cert-hash sha256:4d9b000b6e202da14ad9cefb0aec87fcced40442b51b6d6f22816d83bec2e2aa
在master中执行命令kubectl get node,查看node节点是否成功加入集群,当前状态为NotReady,因为未进行网络配置。
3、网络配置
3.1、部署主机
- YN101-22.host.com
3.2、简介
上面提到的k8s状态为NotReady,说明节点之间还没有产生通讯,所以要进行网络配置。不同的容器平台都需要网络功能,它们之间的适配如果没有统一的标准,会有很大的工作量和重复劳动,而CNI 就是这样一个标准,它旨在为容器平台提供网络的标准化。不同的容器平台能够通过相同的接口调用不同的网络组件。kubernetes中的CNI插件主要有以下:
- Flannel
- Calico
- Canal
- Weave
注意:网络插件选择一个进行安装,本教程对Flannel和Calico两个插件进行安装演示。
3.3、安装网络插件Calico
下载calico.yaml配置文件,Calico官方文档
https://docs.projectcalico.org/manifests/calico.yaml
找到配置文件中CALICO_IPV4POOL_CIDR,value值改为初始化kubernetes管理节点配置pod网段
name: CALICO_IPV4POOL_CIDR
value: "192.168.0.0/16"
#修改-->
value: "10.244.0.0/16"
对资源进行配置
kubectl apply -f calico.yaml
查看calico是否部署成功。只有全部STATUS为Running才算安装完成。
watch kubectl get pods --all-namespaces
此时,执行kubectl get node命名,所有节点状态为Ready。
[root@yn101-22 flannel]# kubectl get node
NAME STATUS ROLES AGE VERSION
yn101-22.host.com Ready master 30h v1.15.0
yn101-31.host.com Ready <none> 2m40s v1.15.0
yn101-32.host.com Ready <none> 2m35s v1.15.0
3.4、安装网络插件Flannel
下载Flannel配置文件kube-flannel.yml,github地址如下:
https://github.com/coreos/flannel/blob/master/Documentation/kube-flannel.yml
对资源进行配置,flannel默认的pod网段为10.244.0.0/16,如果初始化设置为其他网段,同理进行更改。
kubectl apply -f kube-flannel.yml
查看Flannel是否部署成功。只有全部STATUS为Running才算安装完成。
watch kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-bccdc95cf-nxs29 1/1 Running 0 29h
kube-system coredns-bccdc95cf-ttngf 1/1 Running 0 29h
kube-system etcd-yn101-22.host.com 1/1 Running 0 29h
kube-system kube-apiserver-yn101-22.host.com 1/1 Running 0 29h
kube-system kube-controller-manager-yn101-22.host.com 1/1 Running 0 29h
kube-system kube-flannel-ds-amd64-p886d 1/1 Running 0 28s
kube-system kube-proxy-jx4fc 1/1 Running 0 29h
kube-system kube-scheduler-yn101-22.host.com 1/1 Running 0 29h
此时,执行kubectl get node命名,所有节点状态为Ready。
[root@yn101-22 flannel]# kubectl get node
NAME STATUS ROLES AGE VERSION
yn101-22.host.com Ready master 30h v1.15.0
yn101-31.host.com Ready <none> 2m40s v1.15.0
yn101-32.host.com Ready <none> 2m35s v1.15.0
3.5、安装网络插件过程问题解决
查看所有pod,状态STATUS为pending、init、ImagePullBackOff
[root@yn101-22 flannel]# kubectl get pods -n kube-system | grep -v Running
NAME READY STATUS RESTARTS AGE
coredns-bccdc95cf-nxs29 0/1 Pending 0 30h
coredns-bccdc95cf-ttngf 0/1 Pending 0 30h
kube-flannel-ds-amd64-p886d 0/1 Init:0/1 0 14m
根据NAME查看具体错误信息
kubectl describe pod <NAME> -n kube-system
在安装过程中大部门问题都是因为镜像下载失败导致,此时可以查看具体的镜像版本,使用docker拉取,检查是否为网络原因或没有对应的版本镜像。
4、kubernetes移除管理节点
#第一步:列出所有nodes
kubectl get node
#第二步:删除节点
kubectl delete node node3
#第三步:重重置配置
kubeadm reset
#第四步:重新加入集群