适配 v1.25.x 和 v1.26.x 环境
Ubuntu 和 CentOS7 和 CentOS8 已支持
地址 : cby-chen/kube_ansible: 使用 ansible 安装 Kubernetes 高可用集群 (github.com)
https://github.com/cby-chen/kube_ansible
克隆仓库
git clone https://github.com/cby-chen/kube_ansible
如果网络不好可以使用我的代理克隆
git clone https://mirrors.chenby.cn/https://github.com/cby-chen/kube_ansible
注意切换版本
cd v1.25
cd v1.26
在控制主机上进行配置免密
apt install -y sshpass
ssh-keygen -f /root/.ssh/id_rsa -P ''
export IP="192.168.1.130 192.168.1.131 192.168.1.132 192.168.1.128 192.168.1.129"
export SSHPASS=123123
for HOST in $IP;do
sshpass -e ssh-copy-id -o StrictHostKeyChecking=no $HOST
done
安装 ansibls
apt install ansible
编辑主机hosts
vim /etc/ansible/hosts
cat /etc/ansible/hosts
[kube_pki]
192.168.1.31
[etcd]
192.168.1.31 hostname=etcd-1
192.168.1.32 hostname=etcd-1
192.168.1.33 hostname=etcd-1
[kube_master]
192.168.1.31 hostname=k8s-master-1
192.168.1.32 hostname=k8s-master-2
192.168.1.33 hostname=k8s-master-3
[kube_node]
192.168.1.34 hostname=k8s-node-1
192.168.1.35 hostname=k8s-node-2
[chrony]
192.168.1.31
编辑需要下载安装包版本
vim files/download.sh
cat files/download.sh
#!/bin/bash
# 查看版本地址:
#
# https://github.com/containernetworking/plugins/releases/
# https://github.com/containerd/containerd/releases/
# https://github.com/kubernetes-sigs/cri-tools/releases/
# https://github.com/Mirantis/cri-dockerd/releases/
# https://github.com/etcd-io/etcd/releases/
# https://github.com/cloudflare/cfssl/releases/
# https://github.com/kubernetes/kubernetes/tree/master/CHANGELOG
# https://github.com/opencontainers/runc/releases/
# https://download.docker.com/linux/static/stable/x86_64/
# http://mirrors.tuna.tsinghua.edu.cn/elrepo/kernel/el7/x86_64/RPMS/
# 指定版本 kubernetes 只能选择 v1.25.x
kubernetes_server='v1.25.2'
etcd='v3.5.4'
cni_plugins='v1.1.1'
cri_containerd_cni='1.6.8'
crictl='v1.24.2'
cri_dockerd='0.2.5'
cfssl='1.6.2'
cfssljson='1.6.2'
docker_v='20.10.9'
runc='1.1.4'
kernel='5.4.228'
....
# 执行下载命令
cd files
bash download.sh
编辑证书生成的环境变量
vim pki/files/pki.sh
cat pki/files/pki.sh
#!/bin/bash
export k8s_master01="192.168.1.130"
export k8s_master02="192.168.1.132"
export k8s_master03="192.168.1.131"
export lb_vip="192.168.1.22"
略
编辑lb环境变量
vim lb/files/lb.sh
cat lb/files/lb.sh
#!/bin/bash
export lb1="192.168.1.130"
export lb2="192.168.1.132"
export lb3="192.168.1.131"
export vip="192.168.1.22"
export eth="eth0"
export lb="192.168.1.130 192.168.1.132 192.168.1.131"
略
vim main.yaml
# 在执行此playbook时,请先 cd files/ 执行 bash download.sh
# 基础环境初始化
# hosts 写【etcd、kube master、kube node】所处的IP地址
# hosts 中的IP若在 /etc/ansible/hosts 中写过即此处无需再写
# vars 中环境变量需要根据实际情况写
# all 写所有IP地址
# passed 是所有的系统密码,此密码需要所有主机相同
- hosts:
- etcd
- kube_master
- kube_node
remote_user: root
vars:
- all: 192.168.1.130 192.168.1.131 192.168.1.132 192.168.1.128 192.168.1.129
- passwd: 123123
roles:
- role: local_init
- role: chrony
when: "groups['chrony']|length > 0"
- role: kernel
- role: containerd
- role: docker
# 创建证书初始化
# hosts 写【kube master 01】所在的IP地址 【建议在 kube master 01 上执行】
# hosts 中的IP若在 /etc/ansible/hosts 中写过即此处无需再写
# vars 中环境变量需要根据实际情况写
# all 写所有IP地址
# etcd 写 etcd 的所有IP地址
# Master 写所有 kube master 的IP地址
# Work 写所有 kube node 的IP地址
#
# 在执行之前请先修改 pki/files/pki.sh 中环境变量 !!!!!
#
- hosts:
- kube_pki
remote_user: root
roles:
- role: pki
vars:
- all: 192.168.1.130 192.168.1.131 192.168.1.132 192.168.1.128 192.168.1.129
- etcd: 192.168.1.130 192.168.1.131 192.168.1.132
- Master: 192.168.1.130 192.168.1.131 192.168.1.132
- Work: 192.168.1.128 192.168.1.129
# # 初始化etcd集群
# # hosts 写【etcd】所在的IP地址
# # hosts 中的IP若在 /etc/ansible/hosts 中写过即此处无需再写
- hosts:
- etcd
remote_user: root
roles:
- role: etcd
# 初始化master集群
# hosts 写【kube_master】所在的IP地址
# hosts 中的IP若在 /etc/ansible/hosts 中写过即此处无需再写
#
# 在执行之前请先修改 lb/files/lb.sh 中环境变量 !!!!!
#
- hosts:
- kube_master
remote_user: root
roles:
- role: lb
- role: kube_master
- role: completion
# 初始化node集群
# hosts 写【kube_master kube_node】所在的IP地址
# hosts 中的IP若在 /etc/ansible/hosts 中写过即此处无需再写
- hosts:
- kube_master
- kube_node
remote_user: root
roles:
- role: kube_node
# 执行部署,hosts写master 随机一个IP即可 calico 和 cilium 二选一即可
- hosts:
- kube_pki
remote_user: root
roles:
- role: calico
# - role: cilium
- role: coredns
- role: dashboard
- role: ingress
- role: metrics-server
# 执行部署程序
ansible-playbook main.yaml
修改网络为NodePort
kubectl edit svc kubernetes-dashboard
type: NodePort
查看端口
kubectl get svc kubernetes-dashboard -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes-dashboard NodePort 10.108.120.110 <none> 443:30034/TCP 34s
创建token
kubectl -n kubernetes-dashboard create token admin-user
eyJhbGciOiJSUzI1NiIsImtpZCI6IkFZWENLUmZQWTViWUF4UV81NWJNb0JEa0I4R2hQMHVac2J3RDM3RHJLcFEifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNjcwNjc0MzY1LCJpYXQiOjE2NzA2NzA3NjUsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiODkyODRjNGUtYzk0My00ODkzLWE2ZjctNTYxZWJhMzE2NjkwIn19LCJuYmYiOjE2NzA2NzA3NjUsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbi11c2VyIn0.DFxzS802Iu0lldikjhyp2diZSpVAUoSTbOjerH2t7ToM0TMoPQdcdDyvBTcNlIew3F01u4D6atNV7J36IGAnHEX0Q_cYAb00jINjy1YXGz0gRhRE0hMrXay2-Qqo6tAORTLUVWrctW6r0li5q90rkBjr5q06Lt5BTpUhbhbgLQQJWwiEVseCpUEikxD6wGnB1tCamFyjs3sa-YnhhqCR8wUAZcTaeVbMxCuHVAuSqnIkxat9nyxGcsjn7sqmBqYjjOGxp5nhHPDj03TWmSJlb_Csc7pvLsB9LYm0IbER4xDwtLZwMAjYWRbjKxbkUp4L9v5CZ4PbIHap9qQp1FXreA
2023-1-10 更新
· 适配v1.26.x 版本
2022-11-26更新
· 适配 Ubuntu 和 CentOS7 和 CentOS8 环境
· 优化内核安装逻辑过程
· 优化docker安装过程
· 优化整体安装部署过程缩短时间
.
├── README.md
├── v1.25
│ ├── calico
│ │ ├── files
│ │ │ └── calico.yaml
│ │ └── tasks
│ │ └── main.yaml
│ ├── chrony
│ │ ├── defaults
│ │ │ └── main.yml
│ │ ├── handlers
│ │ │ └── main.yaml
│ │ ├── tasks
│ │ │ └── main.yaml
│ │ └── templates
│ │ ├── client.conf.j2
│ │ └── server.conf.j2
│ ├── cilium
│ │ ├── files
│ │ │ ├── connectivity-check.yaml
│ │ │ └── monitoring-example.yaml
│ │ └── tasks
│ │ └── main.yaml
│ ├── completion
│ │ ├── files
│ │ │ └── source.sh
│ │ └── tasks
│ │ └── main.yaml
│ ├── containerd
│ │ ├── files
│ │ │ ├── 99-kubernetes-cri.conf
│ │ │ ├── containerd.conf
│ │ │ ├── containerd.service
│ │ │ ├── crictl.yaml
│ │ │ └── hosts.toml
│ │ └── tasks
│ │ └── main.yaml
│ ├── coredns
│ │ ├── files
│ │ │ └── coredns.yaml
│ │ └── tasks
│ │ └── main.yaml
│ ├── dashboard
│ │ ├── files
│ │ │ ├── dashboard-user.yaml
│ │ │ └── dashboard.yaml
│ │ └── tasks
│ │ └── main.yaml
│ ├── docker
│ │ ├── defaults
│ │ │ └── main.yaml
│ │ ├── files
│ │ │ ├── containerd.service
│ │ │ ├── cri-docker.service
│ │ │ ├── cri-docker.socket
│ │ │ ├── daemon.json
│ │ │ ├── docker.service
│ │ │ └── docker.socket
│ │ └── tasks
│ │ └── main.yaml
│ ├── etcd
│ │ ├── defaults
│ │ │ └── main.yml
│ │ ├── files
│ │ │ └── etcd.service
│ │ ├── tasks
│ │ │ └── main.yaml
│ │ └── templates
│ │ └── etcd.config.yml.j2
│ ├── files
│ │ └── download.sh
│ ├── ingress
│ │ ├── files
│ │ │ ├── backend.yaml
│ │ │ ├── deploy.yaml
│ │ │ └── ingress-demo-app.yaml
│ │ └── tasks
│ │ └── main.yaml
│ ├── kernel
│ │ └── tasks
│ │ └── main.yaml
│ ├── kube_master
│ │ ├── files
│ │ │ └── bootstrap.secret.yaml
│ │ ├── tasks
│ │ │ └── main.yaml
│ │ ├── templates
│ │ │ ├── kube-apiserver.service.j2
│ │ │ ├── kube-controller-manager.service.j2
│ │ │ └── kube-scheduler.service.j2
│ │ └── vars
│ │ └── main.yml
│ ├── kube_node
│ │ ├── files
│ │ │ ├── kubelet-conf.yml
│ │ │ └── kube-proxy.yaml
│ │ ├── tasks
│ │ │ └── main.yaml
│ │ ├── templates
│ │ │ ├── kubelet.service.j2
│ │ │ └── kube-proxy.service.j2
│ │ └── vars
│ │ └── main.yml
│ ├── lb
│ │ ├── files
│ │ │ ├── check_apiserver.sh
│ │ │ └── lb.sh
│ │ └── tasks
│ │ ├── lb.yaml
│ │ └── main.yaml
│ ├── local_init
│ │ ├── defaults
│ │ │ └── main.yaml
│ │ ├── files
│ │ │ ├── calico.conf
│ │ │ ├── ipvs.conf
│ │ │ ├── kernel.conf
│ │ │ └── limits.conf
│ │ ├── handlers
│ │ │ └── main.yaml
│ │ └── tasks
│ │ ├── ipvs.yaml
│ │ ├── kernel.yaml
│ │ ├── libseccomp.yaml
│ │ ├── limits.yaml
│ │ ├── local.yaml
│ │ ├── main.yaml
│ │ ├── network.yaml
│ │ ├── repo.yaml
│ │ ├── sshpass.yaml
│ │ └── yum.yaml
│ ├── main.yaml
│ ├── metrics-server
│ │ ├── files
│ │ │ └── metrics-server.yaml
│ │ └── tasks
│ │ └── main.yaml
│ └── pki
│ ├── files
│ │ ├── admin-csr.json
│ │ ├── apiserver-csr.json
│ │ ├── ca-config.json
│ │ ├── ca-csr.json
│ │ ├── etcd-ca-csr.json
│ │ ├── etcd-csr.json
│ │ ├── front-proxy-ca-csr.json
│ │ ├── front-proxy-client-csr.json
│ │ ├── kubelet-csr.json
│ │ ├── kube-proxy-csr.json
│ │ ├── manager-csr.json
│ │ ├── pki.sh
│ │ ├── scheduler-csr.json
│ │ └── tar.sh
│ └── tasks
│ └── main.yaml
└── v1.26
├── calico
│ ├── files
│ │ └── calico.yaml
│ └── tasks
│ └── main.yaml
├── chrony
│ ├── defaults
│ │ └── main.yml
│ ├── handlers
│ │ └── main.yaml
│ ├── tasks
│ │ └── main.yaml
│ └── templates
│ ├── client.conf.j2
│ └── server.conf.j2
├── cilium
│ ├── files
│ │ ├── connectivity-check.yaml
│ │ └── monitoring-example.yaml
│ └── tasks
│ └── main.yaml
├── completion
│ ├── files
│ │ └── source.sh
│ └── tasks
│ └── main.yaml
├── containerd
│ ├── files
│ │ ├── 99-kubernetes-cri.conf
│ │ ├── containerd.conf
│ │ ├── containerd.service
│ │ ├── crictl.yaml
│ │ └── hosts.toml
│ └── tasks
│ └── main.yaml
├── coredns
│ ├── files
│ │ └── coredns.yaml
│ └── tasks
│ └── main.yaml
├── dashboard
│ ├── files
│ │ ├── dashboard-user.yaml
│ │ └── dashboard.yaml
│ └── tasks
│ └── main.yaml
├── docker
│ ├── defaults
│ │ └── main.yaml
│ ├── files
│ │ ├── containerd.service
│ │ ├── cri-docker.service
│ │ ├── cri-docker.socket
│ │ ├── daemon.json
│ │ ├── docker.service
│ │ └── docker.socket
│ └── tasks
│ └── main.yaml
├── etcd
│ ├── defaults
│ │ └── main.yml
│ ├── files
│ │ └── etcd.service
│ ├── tasks
│ │ └── main.yaml
│ └── templates
│ └── etcd.config.yml.j2
├── files
│ └── download.sh
├── ingress
│ ├── files
│ │ ├── backend.yaml
│ │ ├── deploy.yaml
│ │ └── ingress-demo-app.yaml
│ └── tasks
│ └── main.yaml
├── kernel
│ └── tasks
│ └── main.yaml
├── kube_master
│ ├── files
│ │ └── bootstrap.secret.yaml
│ ├── tasks
│ │ └── main.yaml
│ ├── templates
│ │ ├── kube-apiserver.service.j2
│ │ ├── kube-controller-manager.service.j2
│ │ └── kube-scheduler.service.j2
│ └── vars
│ └── main.yml
├── kube_node
│ ├── files
│ │ ├── kubelet-conf.yml
│ │ └── kube-proxy.yaml
│ ├── tasks
│ │ └── main.yaml
│ ├── templates
│ │ ├── kubelet.service.j2
│ │ └── kube-proxy.service.j2
│ └── vars
│ └── main.yml
├── lb
│ ├── files
│ │ ├── check_apiserver.sh
│ │ └── lb.sh
│ └── tasks
│ ├── lb.yaml
│ └── main.yaml
├── local_init
│ ├── defaults
│ │ └── main.yaml
│ ├── files
│ │ ├── calico.conf
│ │ ├── ipvs.conf
│ │ ├── kernel.conf
│ │ └── limits.conf
│ ├── handlers
│ │ └── main.yaml
│ └── tasks
│ ├── ipvs.yaml
│ ├── kernel.yaml
│ ├── libseccomp.yaml
│ ├── limits.yaml
│ ├── local.yaml
│ ├── main.yaml
│ ├── network.yaml
│ ├── repo.yaml
│ ├── sshpass.yaml
│ └── yum.yaml
├── main.yaml
├── metrics-server
│ ├── files
│ │ └── metrics-server.yaml
│ └── tasks
│ └── main.yaml
└── pki
├── files
│ ├── admin-csr.json
│ ├── apiserver-csr.json
│ ├── ca-config.json
│ ├── ca-csr.json
│ ├── etcd-ca-csr.json
│ ├── etcd-csr.json
│ ├── front-proxy-ca-csr.json
│ ├── front-proxy-client-csr.json
│ ├── kubelet-csr.json
│ ├── kube-proxy-csr.json
│ ├── manager-csr.json
│ ├── pki.sh
│ ├── scheduler-csr.json
│ └── tar.sh
└── tasks
└── main.yaml
126 directories, 183 files
关于
https://www.oiox.cn/index.php/start-page.html
CSDN、GitHub、知乎、开源中国、思否、掘金、简书、华为云、阿里云、腾讯云、哔哩哔哩、今日头条、新浪微博、个人博客
全网可搜《小陈运维》
文章主要发布于微信公众号