k8s(Kubernetes)实战(三)之 通过kubespray-2.15.0 部署k8s

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模式。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值