------转载https://blog-qdp.top----------------------------------

环境准备


节点信息

hostname

ip

role

etcd

k8s-master01

192.168.10.101

master

etcd-node01

k8s-node01

192.168.10.102

node

etcd-node02

k8s-node02

192.168.10.103

node

etcd-node03

各节点配置

# 关闭SELinux
setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

# 关闭swap分区
echo "vm.swappiness = 0">> /etc/sysctl.conf
swapoff -a && swapon -a
sysctl -p

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
sysctl -w net.ipv4.ip_forward=1

# 安装python及epel
yum install -y epel-release python36 python36-pip git

# 修改hosts
echo >> /etc/hosts << EOF
192.168.10.101 k8s-master01
192.168.10.102 k8s-node01
192.168.10.103 k8s-node02
EOF

免密登录(ansible主机)

ssh-keygen
ssh-copy-id k8s-master01
ssh-copy-id k8s-node01
ssh-copy-id k8s-node02

部署集群(ansible主机)

# 获取项目
wget https://github.com/kubernetes-sigs/kubespray/archive/v2.12.4.tar.gz

# 解压
tar zxvf v2.12.4.tar.gz

# 进目录
cd kubespray

# 安装所需版本软件
pip3.6 install -r requirements.txt

# 拷贝sample配置
cp -rfp inventory/sample inventory/mycluster

# 修改mycluster/hosts.yaml配置
declare -a IPS=(192.168.10.101 192.168.10.102 192.168.10.103)
CONFIG_FILE=inventory/mycluster/hosts.yaml python3.6 contrib/inventory_builder/inventory.py ${IPS[@]}

# 删除k8s-node1、k8s-node2的master角色
vim inventory/mycluster/hosts.yaml

# 执行安装
ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root cluster.yml

增加节点

# 修改hosts.yaml文件添加节点
# 执行命令添加节点
ansible-playbook -i inventory/mycluster/hosts.yaml scale.yml -b -v

更新k8s集群

ansible-playbook upgrade-cluster.yml -b -i inventory/sample/hosts.ini -e kube_version=v1.15.0

卸载

ansible-playbook -i inventory/mycluster/hosts.ini reset.yml
# 每个节点都要执行
rm -rf /etc/kubernetes/
rm -rf /var/lib/kubelet
rm -rf /var/lib/etcd
rm -rf /usr/local/bin/kubectl
rm -rf /etc/systemd/system/calico-node.service
rm -rf /etc/systemd/system/kubelet.service

hosts.yaml 配置文件

all:
hosts:
k8s-master01 :
ansible_host: 192.168.10.101
ip: 192.168.10.101
access_ip: 192.168.10.101
k8s-node01:
ansible_host: 192.168.10.102
ip: 192.168.10.102
access_ip: 192.168.10.102
k8s-node02:
ansible_host: 192.168.10.103
ip: 192.168.10.103
access_ip: 192.168.10.103
children:
kube-master:
hosts:
k8s-master01:
kube-node:
hosts:
k8s-node01:
k8s-node02:
etcd:
hosts:
k8s-master01:
k8s-node01:
k8s-node02:
k8s-cluster:
children:
kube-master:
kube-node:
calico-rr:
hosts: {}

镜像无法下载

# changerepo.sh
grc_image_files=(
./kubespray/extra_playbooks/roles/download/defaults/main.yml
./kubespray/extra_playbooks/roles/kubernetes-apps/ansible/defaults/main.yml
./kubespray/roles/download/defaults/main.yml
./kubespray/roles/kubernetes-apps/ansible/defaults/main.yml
)

for file in ${grc_image_files[@]} ; do
sed -i 's/gcr.io\/google_containers/registry.cn-hangzhou.aliyuncs.com\/szss_k8s/g' $file
done

quay_image_files=(
./kubespray/extra_playbooks/roles/download/defaults/main.yml
./kubespray/roles/download/defaults/main.yml
)

for file in ${quay_image_files[@]} ; do
sed -i 's/quay.io\/coreos\//registry.cn-hangzhou.aliyuncs.com\/szss_quay_io\/coreos-/g' $file
sed -i 's/quay.io\/calico\//registry.cn-hangzhou.aliyuncs.com\/szss_quay_io\/calico-/g' $file
sed -i 's/quay.io\/l23network\//registry.cn-hangzhou.aliyuncs.com\/szss_quay_io\/l23network-/g' $file
done