k8s(Kubernetes)实战(三)之 通过kubespray-2.15.0 部署k8s
用二进制文件的方法部署完k8s之后,发现过程实在太复杂了,后期维护起来也很麻烦。之前看到有kubeadm的安装方式,一番检索后,确认使用kubespray来部署k8s更专业,适用于生产环境。kubespray官网:https://kubespray.io/#/项目地址:https://github.com/kubernetes-sigs/kubespraykubespray好像是使用专业的运维脚本
k8s合集:
k8s(Kubernetes)实战(一)之部署etcd与flannel
k8s(Kubernetes)实战(二)之部署api-server、controller-manager、scheduler、kubelet
k8s(Kubernetes)实战(三)之 通过kubespray-2.15.0 部署k8s
用二进制文件的方法部署完k8s之后,发现过程实在太复杂了,后期维护起来也很麻烦。之前看到有kubeadm的安装方式,一番检索后,确认使用kubespray来部署k8s更专业,适用于生产环境。
kubespray官网:https://kubespray.io/#/
项目地址:https://github.com/kubernetes-sigs/kubespray
kubespray好像是使用专业的运维脚本ansible来实现自动化部署的,我是开发也不太懂ansible,好在网上教程比较多,下面就陈述一下我的部署过程吧。
一、准备工作
1.系统设置
设置关闭防火墙、SELinux、swap
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
swapoff -a
yes | cp /etc/fstab /etc/fstab_bak
cat /etc/fstab_bak |grep -v swap > /etc/fstab
2.统一时钟
略
3.ssh免密
ssh-keygen
ssh-copy-id 192.168.3.248
ssh-copy-id 192.168.3.251
ssh-copy-id 192.168.3.220
二、下载安装包
在该项目github的release页可以找到各个版本的下载地址,可以看到各个版本所支持的各种软件的版本。我下载的是当前最新版本,2.15.
#进入下载目录
cd /data/download
#下载kubespray文件
wget https://github.com/kubernetes-sigs/kubespray/archive/v2.15.0.tar.gz
#解压文件
tar -zxvf v2.15.0.tar.gz
#把文件目录转移到软件目录去
mv kubespray /data/soft/kubespray-2.15.0
进入部署安装包根目录
cd /data/soft/kubespray-2.15.0
安装依赖的软件,需要先安装 python3
pip3 install -r requirements.txt
三、创建个人目录
拷贝例子目录
cp -r inventory/sample inventory/mycluster
初始化节点IP,我准备了4台服务器,下面这些IP是要加入k8s的服务器地址。
declare -a IPS=(192.168.3.218 192.168.3.248 192.168.3.251 192.168.3.220)
CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
然后,可以查看它生成的服务器编排文件,以后要增减节点也是操作这个文件,十分的简单易懂。
[root@node1 kubespray-2.15.0]# cat inventory/mycluster/hosts.yaml
all:
hosts:
node1:
ansible_host: 192.168.3.218
ip: 192.168.3.218
access_ip: 192.168.3.218
node2:
ansible_host: 192.168.3.248
ip: 192.168.3.248
access_ip: 192.168.3.248
node3:
ansible_host: 192.168.3.251
ip: 192.168.3.251
access_ip: 192.168.3.251
node4:
ansible_host: 192.168.3.220
ip: 192.168.3.220
access_ip: 192.168.3.220
children:
kube-master:
hosts:
node1:
node2:
kube-node:
hosts:
node1:
node2:
node3:
node4:
etcd:
hosts:
node1:
node2:
node3:
k8s-cluster:
children:
kube-master:
kube-node:
calico-rr:
hosts: {}
三、替换国内下载源
这个部署脚本中,使用了很多已经被墙的国外网站的地址,要想在国内顺利的下载,需要将其替换为国内的下载源。
修改 inventory/mycluster/group_vars/all/all.yml
vim inventory/mycluster/group_vars/all/all.yml
添加如下内容:
kubelet_load_modules: true
gcr_image_repo: "registry.aliyuncs.com"
kube_image_repo: "{{ gcr_image_repo }}/google_containers"
quay_image_repo: "quay.mirrors.ustc.edu.cn"
修改下个文件 inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml
vim inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml
添加如下内容
kube_image_repo: "registry.aliyuncs.com/google_containers"
#我自己建的一个命名空间,里面放了这次需要下载的一些镜像,在下面的main.yml里面用到
my_k8s_repo: "registry.cn-hangzhou.aliyuncs.com/easy-k8s"
这些设置完毕之后,大部分下载和镜像都没问题了,但是还有个别镜像,国内可能更新比较慢,阿里的google_containers里卖弄没有,需要要单独设置地址,
修改roles/download/defaults/main.yml
如下两个镜像,我是单独下载的,然后存在我创建的阿里仓库里面
#修改后的内容
nodelocaldns_image_repo: "{{ my_k8s_repo }}/k8s-dns-node-cache"
dnsautoscaler_image_repo: "{{ my_k8s_repo }}/cluster-proportional-autoscaler-{{ image_arch }}"
除了上面的镜像外,还有一些二进制文件的下载地址,速度太慢,基本没法下载。
还是这个文件,roles/download/defaults/main.yml,下面这几个地址倒是都能连的上,就是可能速度不太快。多尝试几次,应该是能下载完的。
# Download URLs
kubelet_download_url: "https://storage.googleapis.com/kubernetes-release/release/{{ kube_version }}/bin/linux/{{ image_arch }}/kubelet"
kubectl_download_url: "https://storage.googleapis.com/kubernetes-release/release/{{ kube_version }}/bin/linux/{{ image_arch }}/kubectl"
kubeadm_download_url: "https://storage.googleapis.com/kubernetes-release/release/{{ kubeadm_version }}/bin/linux/{{ image_arch }}/kubeadm"
etcd_download_url: "https://github.com/coreos/etcd/releases/download/{{ etcd_version }}/etcd-{{ etcd_version }}-linux-{{ image_arch }}.tar.gz"
cni_download_url: "https://github.com/containernetworking/plugins/releases/download/{{ cni_version }}/cni-plugins-linux-{{ image_arch }}-{{ cni_version }}.tgz"
calicoctl_download_url: "https://github.com/projectcalico/calicoctl/releases/download/{{ calico_ctl_version }}/calicoctl-linux-{{ image_arch }}"
crictl_download_url: "https://github.com/kubernetes-sigs/cri-tools/releases/download/{{ crictl_version }}/crictl-{{ crictl_version }}-{{ ansible_system | lower }}-{{ image_arch }}.tar.gz"
如果嫌弃实在太慢,有两种方法
1.手动下载,然后放到kubespray_cache中去。
可以在配置 inventory/mycluster/group_vars/all/all.yml 中添加内容 download_force_cache: true
手动下载好各个文件之后,放到各节点的 /tmp/kubespray_cache/ 目录, 没有该目录自行创建
2.自己建一个nginx下载服务,然后把地址改成自己的nginx下载服务中的文件地址。
四、开始安装
根目录下,执行命令,然后就看屏幕里的字一只滚吧。
##这里的--become-user=root 是ansible的升权配置。如果用的是普通账户,前面要加sudo,这里依然是写root而不是当前用户
ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root cluster.yml
如果因为网络问题,安装中断,那么再次执行上述命令就行了。对于执行过的脚本,会自动监测跳过的。
问题:
1.有时候安装断了,再次安装,会遇到什么yum lockfile 什么的错误,只要把对应的电脑重启下就好了。
2.etcd步骤那里,确认etcd节点健康一直出问题,后来发现是时钟的问题,时钟同步后还是有问题,再就把etcd已经生成的证书全删了,就通过了,证书在/etc/ssl/etcd/ssl。
3.有一台机器的kubelet一支启动不起来,查看日志发现是flanneld没卸载,把它卸了就好了
4.docker安装失败,docker冲突,卸载原来版本的docker
五、完成
检查集群健康状况节点信息
[root@node1 kubespray-2.15.0]# kubectl get cs
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health":"true"}
etcd-1 Healthy {"health":"true"}
etcd-2 Healthy {"health":"true"}
如果controller-manager 和 scheduler不是健康的,那么修改下面两个文件,
/etc/kubernetes/manifests/kube-controller-manager.yaml
/etc/kubernetes/manifests/kube-scheduler.yaml
将其中的--port=0注释掉就好了。
六、节点伸缩
修改文件 inventory/mycluster/hosts.yaml
我们把kube-node里面的node4先去掉,
然后执行
ansible-playbook -i inventory/mycluster/hosts.yaml remove-node.yml -b -v
增加节点也一样,节点计器先做基本配置,关闭该关的,配置ssh免密码,然后再 inventory/mycluster/hosts.yaml文件修改信息,执行下面代码
ansible-playbook -i inventory/mycluster/hosts.yaml cluster.yml -b -v
七、高可用
kubespray的高可用,是在每个node节点上,有一个nginx proxy来负载均衡所有的master节点。
也只有这种通过脚本部署的方式,才适合这样的HA模式。
更多推荐
所有评论(0)