kubespray部署升级K8S方案手册
Kubespray
1. Kubespray版本介绍
1.1 版本区别
Kubespray版本 |
默认支持最低K8S版本 |
默认支持最高K8S版本 |
kubernetes二进制文件 |
release-2.12 |
v1.15.0 |
v1.17.0 |
Kubeadm,kubelet,kubectl |
release-2.11 |
v1.14.0 |
v1.15.11 |
Hyperkube,kubeadm |
release-2.10 |
v1.12.0 |
v1.14.6 |
Hyperkube,kubeadm |
release-2.9 |
v1.12.0 |
v1.14.0 |
Hyperkube,kubeadm |
release-2.8 |
v1.10.0 |
v1.12.7 |
Hyperkube,kubeadm |
release-2.7 |
v1.10.0 |
v1.11.3 |
Hyperkube,kubeadm |
1.2 总结
Kubespray release-2.12 以下版本均需要下载hyperkube二进制文件。
2. Kubespray国内在线部署K8S升级方案
2.1 修改docker-ce Yum源
目标部署主机上设置 docker-ce yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.2 kubespray配置修改
2.2.1 修改镜像下载与二进制文件下载地址
由于镜像和二进制资源均为国外的资源,我们需要修改download下的资源地址。
文件路径为:/root/kubespray/roles/download/defaults/main.yml
2.2.1.1 修改镜像地址为Azure中国镜像
原文件:
修改后:
2.2.2.2 修改二进制文件地址为本地HTTP服务器地址
原文件:
修改后:
2.2.2 ETCD高可用配置修改
yml文件路径:
~/kubespray/roles/kubernetes/preinstall/tasks/0020-verify-settings.yml
2.2.3 docker 本地yum安装源文件拷贝
待处理
2.3 K8S默认部署配置修改
根据实际情况修改
/root/kubespray/roles/kubespray-defaults/defaults/main.yml
如kube_service_addresses,kube_pods_subnet
2.4 配置inventory文件
2.4.1 拷贝inventory.ini模板文件
cp –r /root/kubespray/inventory/sample/inventory.ini /root/kubespray/
2.4.2 根据要求修改inventory.ini文件
2.5 Ansible主机上设置免密码操作其它主机
2.5.1生成ssh公钥和私钥
ssh-keygen
2.5.2建立ssh通道,将秘钥分发给主机
ssh-copy-id root@192.168.56.20
2.6 k8s集群部署
目标版本:v1.13.1
Kubespray版本:2.10
2.6.1 进入kubespray目录
cd kubespray
2.6.2 执行部署命令
ansible-playbook cluster.yml -b -i inventory.ini -e kube_version=v1.13.1 -vvv
2.7 k8s集群升级
Kubespray 升级k8s是利用kubeadm进行升级,kubeadm目前支持跨越一个版本的,如1.13的只支持升到1.14,1.14只能升到1.15。
可升级列表:
a) Docker
b) Etcd
c) kubelet and kube-proxy
d) network_plugin (Calico 或flannel)
e) kube-apiserver, kube-scheduler, and kube-controller-manager
f) Add-ons (KubeDNS)
2.7.1 组件升级
2.7.1.1 升级 docker
ansible-playbook -b -i inventory/sample/hosts.ini cluster.yml --tags=docker
2.7.1.2 升级 etcd
ansible-playbook -b -i inventory/sample/hosts.ini cluster.yml --tags=etcd
2.7.1.3 升级 vault
ansible-playbook -b -i inventory/sample/hosts.ini cluster.yml --tags=vault
2.7.1.4 升级 kubelet
ansible-playbook -b -i inventory/sample/hosts.ini cluster.yml --tags=node --skip-tags=k8s-gen-certs,k8s-gen-tokens
2.7.1.5 升级 Kubernetes master 组件
ansible-playbook -b -i inventory/sample/hosts.ini cluster.yml --tags=master
2.7.1.6 升级 network plugins
ansible-playbook -b -i inventory/sample/hosts.ini cluster.yml --tags=network
2.7.1.7 升级 all add-ons:
ansible-playbook -b -i inventory/sample/hosts.ini cluster.yml --tags=apps
2.7.2 k8s集群整体版本升级
2.7.2.1 升级背景
版本变化:v1.13.1 -> v1.15.3
原始版本:v1.13.1 部署环境:kubespray2.12版本以下部署
目标版本:v1.15.3 部署环境:kubespray所有版本应均可以部署(暂测试2.10,2.12)
升级计划:使用kubespray2.10 将k8s v1.13.1 升至 v1.14.3
使用kubespray2.12 将k8s v1.14.3 升至 v1.15.3
2.7.2.2 具体步骤
2.7.2.2.1 配置kubespray 2.10
参考步骤2.2~2.4
2.7.2.2.2 将K8S升级至v1.14.3
- cd kubespray-2.10
- ansible-playbook upgrade-cluster.yml -b -i inventory.ini -e kube_version=v1.14.3 –vvv
2.7.2.2.3 配置kubespray 2.12
参考步骤2.2~2.4
2.7.2.2.4 将K8S升级至v1.15.3
- cd kubespray-2.12
- ansible-playbook upgrade-cluster.yml -b -i inventory.ini -e kube_version=v1.15.3 –vvv
3. Kubespray内网部署升级K8S方案
3.1 docker-ce 本地yum源配置
部署主机上配置本地的yum源
3.2 kubespray配置修改
参考2.2将各地址配置成本地docker镜像仓库,及本地的http文件下载服务器的地址
3.2.1 目标部署主机配置docker镜像源
vim /etc/docker/daemon.json
3.2.2 ETCD高可用配置修改
参考2.2.2
3.3 K8S默认部署配置修改
参考2.3
3.4 配置inventory文件
参考2.4
3.5 Ansible主机上设置免密码操作其它主机
参考2.5
3.6 k8s集群部署
参考2.6
3.7 k8s集群升级
参考2.7