用Ansible集群部署K8s
前提:
#主节点要安装有ansible,并且配置好inventory和ansible.cfg
$ mkdir user_homepath/ansible
$ cd ansible/of/homepath
#家目录的ansible路径下配置好inventory,ansible.cfg文件
$ vim inventory
[xxx]
IP
$ vim ansible.cfg
inventory = path/to/inventory
host_key_checking= false #控制远端节点时候免密认证
主节点操作:
$ ansible all -m command -a "sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux"
$ ansible all -m yum_repository -a "name=Kubernetes description='install_k8s' baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 gpgcheck=yes gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg enabled=yes"
#配置k8s的yum源,注意这里gpgkey有两个
$ ansible all -m command -a "ls /etc/yum.repos.d" #查看是否是yum.repos.d目录是否已经被配置好了K8S的yum源
$ ansible all -m command -a "yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo" #配置docker yum源
$ ansible all -m command -a "yum install -y kubelet-1.22.4 kubectl-1.22.4 kubeadm-1.22.4 docker-ce" #集群部署K8s
$ ansible all -m command -a "systemctl enable --now kubelet docker"
# 创建从 /etc/systemd/system/multi-user.target.wants/xxx.service 到 /usr/lib/systemd/system/xxx.service 的符号链接。——立即生效且开机能自动启用这两个服务
$ ansible all -m command -a "systemctl is-active kubelet docker" #查看状态
$ ansible all -m copy -a "content='{
\"exec-opts\": [\"native.cgroupdriver=systemd\"],
\"registry-mirrors\": [\"https://ud6340vz.mirror.aliyuncs.com\"]
}' dest=/etc/docker/daemon.json"
$ ansible all -m command -a "systemctl daemon-reload "
$ ansible all -m command -a "systemctl restart docker"
$ ansible all -m shell -a "echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables"
$ kubeadm init --image-repository=registry.aliyuncs.com/google_containers
# 主控节点操作这条指令,当然你也可以将所有节点都设为主控节点,但没必要
# 记得把 kubeadm join xxx 保存起来
# 忘记了kubeadm join可以在主控节点重新获取,指令如下:
$ kubeadm token create --print-join-command
$ mkdir -p $HOME/.kube
$ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ chown $(id -u):$(id -g) $HOME/.kube/config# 等同于chown 用户名:组名 $HOME/.kube/config
# 主控节点操作,必须完成上述cp -i操作,不然会 $ kubectl get node 时会遇到错误提示如下一行:
# The connection to the server localhost:8080 was refused - did you specify the right host or port?
# 复制授权文件,以便 kubectl 可以有权限访问集群
# 如果你其他节点需要访问集群,需要从主节点复制这个文件过去其他节点,在其他机器上创建 ~/.kube/config 文件也能通过 kubectl 访问到集群,集群指令如下:
$ ansible all -m shell -a "mkdir -p $HOME/.kube"
$ ansible all -m copy -a "src=$HOME/.kube/config dest=$HOME/.kube/config owner=root group=root"
#需要注意的是copy中src是本机的目录,dest是被控节点的目录
$ kubectl get node #获取k8s节点信息
$ ansible all -m shell -a "kubeadm join xxx"
# 在主控节点用集群化管理工具(我用的是ansible)进行多被控节点加入k8s集群管理
k8s被控节点操作:(可忽略———建议是在主节点部署多节点加入)
$ kubeadm join xxx
#使用主控节点kubeadm token create --print-join-command获取到的加入信息在被控节点处进行加入,但是一般这样要一个个尝试,失去了集群管理的意义,所以建议还是在主控节点用集群化管理工具(我用的是ansible)进行多节点加入