1. 程式人生 > >安裝kubernetes 叢集

安裝kubernetes 叢集

使用 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