前言
kubespray基于ansible-playbook完成集群部署,可以自动完成操作系统层面配置,利用了kubeadm作为集群管理工具,这里介绍一下是如何使用的。
实验环境
本机mac 部署节点
192.168.0.61 k8s-master
192.168.0.62 k8s-master
192.168.0.63 k8s-node
一、环境准备
1、安装docker
#需要在每个节点上安装docker
apt install docker.io
2、配置docker cgroupdriver为systemd
vi /etc/docker/daemon.conf
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
systemctl daemon-reload
systemctl restart docker
以下操作均在部署节点上执行
二、安装kubespray
1、下载镜像
docker pull quay.io/kubespray/kubespray:v2.16.0
2、下载源码
git clone https://github.com/kubernetes-sigs/kubespray.git
3、设置免密
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.61
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.62
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.63
三、部署高可用集群
1、启动kubespray镜像
cd kubespray
docker run --net host --rm -it --name kubespray --mount type=bind,source="$(pwd)"/inventory/sample,dst=/inventory --mount type=bind,source="${HOME}"/.ssh/id_rsa,dst=/root/.ssh/id_rsa quay.io/kubespray/kubespray:v2.16.0 bash
2、配置主机列表
cp -r inventory/sample inventory/mycluster
declare -a IPS=(192.168.0.61 192.168.0.62 192.168.0.63)
CONFIG_FILE=inventory/mycluster/hosts.yml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
3、查看集群部署配置
all:
hosts:
node1:
ansible_host: 192.168.0.61
ip: 192.168.0.61
access_ip: 192.168.0.61
node2:
ansible_host: 192.168.0.62
ip: 192.168.0.62
access_ip: 192.168.0.62
node3:
ansible_host: 192.168.0.63
ip: 192.168.0.63
access_ip: 192.168.0.63
children:
#控制平面节点配置
kube_control_plane:
hosts:
node1:
node2:
#node节点节点配置
kube_node:
hosts:
node3:
#etcd节点配置
etcd:
hosts:
node1:
node2:
node3:
k8s_cluster:
children:
kube_control_plane:
kube_node:
calico_rr:
hosts: {}
4、改变镜像源
cat > inventory/mycluster/group_vars/k8s_cluster/vars.yml << EOF
gcr_image_repo: "registry.aliyuncs.com/google_containers"
kube_image_repo: "registry.aliyuncs.com/google_containers"
etcd_download_url: "https://ghproxy.com/https://github.com/coreos/etcd/releases/download/{{ etcd_version }}/etcd-{{ etcd_version }}-linux-{{ image_arch }}.tar.gz"
cni_download_url: "https://ghproxy.com/https://github.com/containernetworking/plugins/releases/download/{{ cni_version }}/cni-plugins-linux-{{ image_arch }}-{{ cni_version }}.tgz"
calicoctl_download_url: "https://ghproxy.com/https://github.com/projectcalico/calicoctl/releases/download/{{ calico_ctl_version }}/calicoctl-linux-{{ image_arch }}"
calico_crds_download_url: "https://ghproxy.com/https://github.com/projectcalico/calico/archive/{{ calico_version }}.tar.gz"
crictl_download_url: "https://ghproxy.com/https://github.com/kubernetes-sigs/cri-tools/releases/download/{{ crictl_version }}/crictl-{{ crictl_version }}-{{ ansible_system | lower }}-{{ image_arch }}.tar.gz"
nodelocaldns_image_repo: "cncamp/k8s-dns-node-cache"
dnsautoscaler_image_repo: "cncamp/cluster-proportional-autoscaler-amd64"
EOF
5、部署集群
#如果有镜像拉取超时,可以多执行几次
ansible-playbook -i inventory/mycluster/hosts.yml cluster.yml -b -v \
--private-key=~/.ssh/id_rsa
部署成功