安裝kubernetes 叢集
阿新 • • 發佈:2019-09-20
使用 kubeasz 安裝 kubernetes 叢集
kubeasz github https://github.com/easzlab/kubeasz
配置:4核心 8GB記憶體(僅master角色2G記憶體也行) 系統:CentOS-7.6 1810 Minimal 注意: 1.開始安裝前確保系統時間正常 2.所有命令只需要在部署節點(192.168.2.71)執行 3.只需要更改 配置變數中的 SERVER_NAM SERVER_IP 變數 與 /etc/ansible/hosts 配置檔案 其他引數均以變數方式自動識別 角色資訊: etcd: 192.168.2.71 192.168.2.72 192.168.2.73 kube-master: 192.168.2.71 192.168.2.72 kube-node: 192.168.2.72 192.168.2.73 192.168.2.74 chrony: 192.168.2.71
- 配置變數
# 替換變數值為實際IP地址 注意主機名與IP個數對應 以空格分隔
SERVER_NAME=(node01 node02 node03 node04)
SERVER_IP=(192.168.2.71 192.168.2.72 192.168.2.73 192.168.2.74)
- 設定本地Host解析
# 清理 hosts(只保留2行 新增 k8s 叢集主機hosts解析) sed -i '3,$d' /etc/hosts echo -e "\n# k8s cluster" >> /etc/hosts let SER_LEN=${#SERVER_IP[@]}-1 for ((i=0;i<=$SER_LEN;i++)); do echo "${SERVER_IP[i]} ${SERVER_NAME[i]}" >> /etc/hosts done
- 配置ssh祕鑰登入
# 替換 SSH_RROT_PASSWD 值為 root SSH 密碼 SSH_RROT_PASSWD=redhat curl -sSL -o ssh-key-copy.sh https://dwz.cn/S0NQWllm chmod +x ssh-key-copy.sh && ./ssh-key-copy.sh "$(echo ${SERVER_IP[@]})" root $SSH_RROT_PASSWD # 同步hosts檔案 for node in ${SERVER_IP[@]}; do scp /etc/hosts $node:/etc/hosts done
- 設定主機名
for node in ${SERVER_IP[@]}; do
ssh -T $node <<'EOF'
HOST_IF=$(ip route|grep default|cut -d ' ' -f5)
HOST_IP=$(ip a|grep "$HOST_IF$"|awk '{print $2}'|cut -d'/' -f1)
hostnamectl set-hostname $(grep $HOST_IP /etc/hosts | awk '{print $2}')
EOF
done
- 優化引數
for node in ${SERVER_IP[@]}; do
ssh -T $node <<'EOF'
# 優化ssh連線速度
sed -i "s/#UseDNS yes/UseDNS no/" /etc/ssh/sshd_config
sed -i "s/GSSAPIAuthentication .*/GSSAPIAuthentication no/" /etc/ssh/sshd_config
systemctl restart sshd
# 配置yum源
rm -f /etc/yum.repos.d/*.repo
curl -so /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo
curl -so /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
sed -i '/aliyuncs.com/d' /etc/yum.repos.d/Centos-7.repo /etc/yum.repos.d/epel-7.repo
EOF
done
- 關閉部署機防火牆
當前部署節點與k8s叢集共用一節點 安裝k8s叢集會刪除防火牆導致 部署容器網路故障 部署失敗
systemctl stop firewalld
systemctl disable firewalld
- 下載安裝資源
下載easzup
export release=2.0.3
curl -C- -fLO --retry 3 https://github.com/easzlab/kubeasz/releases/download/${release}/easzup
chmod +x ./easzup
替換映象加速站點
cp easzup .easzup
sed -i 's#"https://dockerhub.azk8s.cn",#"http://3272dd08.m.daocloud.io"#' easzup
sed -ni 'p;/3272dd08/n' easzup
sed -ni 'p;/3272dd08/n' easzup
下載資源
./easzup -D
- 開始安裝
啟動&進入 ansible-docker
# 同步容器時區
sed -i '280a\ --volume /etc/localtime:/etc/localtime \\' easzup
# 啟動&進入
./easzup -S
docker exec -it kubeasz /bin/bash
建立ansibel配置檔案
# 複製模板
cp /etc/ansible/example/hosts.multi-node /etc/ansible/hosts
# 手動修改修改配置檔案 /etc/ansible/host 以下引數根據實際情況修改
vi /etc/ansible/hosts
[etcd]
192.168.2.71 NODE_NAME=etcd1
192.168.2.72 NODE_NAME=etcd2
192.168.2.73 NODE_NAME=etcd3
[kube-master] # 此處填寫 master IP 除k8s網路容器外不執行其他pod
192.168.2.71
192.168.2.72
[kube-node] # 此處填寫 work 節點IP
192.168.2.72
192.168.2.73
192.168.2.74
[chrony]
192.168.2.71
配置私有倉庫, docker加速
在安裝前配置(因為修改這些配置需要重啟docker服務)
# 修改docker 加速地址
sed -i "s#REG_MIRRORS:.*#REG_MIRRORS: '[\"http://3272dd08.m.daocloud.io\"]'#" /etc/ansible/roles/docker/defaults/main.yml
# 修改信任docker 倉庫 (修改HARBOR 變數為本地倉庫地址)
HARBOR=192.168.2.75
sed -i "s#127.0.0.1/8#$HARBOR#" /etc/ansible/roles/docker/defaults/main.yml
安裝
cd /etc/ansible
ansible all -m ping # 驗證配置檔案中的主機通訊
ansible-playbook 90.setup.yml # 安裝
ansible-playbook 99.clean.yml # 清理(安裝失敗還原環境)
- 安裝後續處理
檢視登入令牌
# admin 登入令牌
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
# 只讀 登入令牌
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep read-user | awk '{print $1}')
# 寫入配置檔案
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}') | grep token: | sed 's#^token: # token:#' >> ~/.kube/config
# 安裝 lrzsz 後使用 sz ~/.kube/config 到win主機 使用此檔案可以直接登入k8s web控制檯
# 定時備份 etcd
echo '0 */1 * * * /usr/bin/ansible-playbook /etc/ansible/23.backup.yml >> /tmp/etcd_backup.log' > /etc/crontab
crontab /etc/crontab
# 部署完成 刪除部署容器
exit
docker rm -f kubeasz
管理
退出重新登入終端(原因:重讀環境變數)
# 檢視 dashboard 埠
kubectl -n kube-system get svc | grep kubernetes-dashboard
# 節點狀態
kubectl get node
kubec