------转载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