基於 Ansible 快速部署 kubernetes 1.10.4 HA 高可用叢集
一、背景
菜鳥只是拿來試試,順便記錄下過程。
二、部署過程
2.1 準備機器
本次實驗準備了4臺虛機,192.168.5.201~204 ,主機名 node-01 ~ node-04
node-01 當作部署機,node-01~02 作為 Master,node-03~04 作為 Slave
全部安裝 CentOS Linux release 7.5.1804 64位 作業系統
2.2 前期配置
在每個節點安裝依賴工具
yum install epel-release -y
yum update
yum install python -y
2.3 準備部署節點
a. 在 node-01 上安裝 git 和 ansible
yum install git ansible -y
b. 配置 node-01 到 node-01~04 的免密碼 ssh 登陸
以 root 使用者登入 node-01,執行如下命令
ssh-keygen -t rsa -P ''
ssh-copy-id -i 192.168.5.201
ssh-copy-id -i 192.168.5.202
ssh-copy-id -i 192.168.5.203
ssh-copy-id -i 192.168.5.204
c. 準備 ansible 指令碼
下載下來後,將解壓內容放到 /etc/ansible/
d. 按需修改 hosts 檔案,分配叢集角色
注意 LB 的網絡卡介面資訊需要跟實際機器保持一致
附上實驗使用的 hosts 配置檔案
# 部署節點:執行這份 ansible 指令碼的節點 [deploy] 192.168.5.201 # etcd叢集請提供如下NODE_NAME,注意etcd叢集必須是1,3,5,7...奇數個節點 [etcd] 192.168.5.201 NODE_NAME=etcd1 192.168.5.202 NODE_NAME=etcd2 192.168.5.203 NODE_NAME=etcd3 [kube-master] 192.168.5.201 192.168.5.202 # 負載均衡至少兩個節點,安裝 haproxy+keepalived # 如果是公有云環境請優先使用雲上負載均衡,lb組留空 [lb] 192.168.5.201 LB_IF="ens33" LB_ROLE=backup # 注意根據實際使用網絡卡設定 LB_IF變數 192.168.5.202 LB_IF="ens33" LB_ROLE=master [kube-node] 192.168.5.203 192.168.5.204 # 如果啟用harbor,請配置後面harbor相關引數 [harbor] #192.168.1.8 # 預留組,後續新增master節點使用 [new-master] #192.168.1.5 # 預留組,後續新增node節點使用 [new-node] #192.168.1.xx [all:vars] # ---------叢集主要引數--------------- #叢集部署模式:allinone, single-master, multi-master DEPLOY_MODE=multi-master #叢集主版本號,目前支援: v1.8, v1.9, v1.10 K8S_VER="v1.10" # 叢集 MASTER IP即 LB節點VIP地址,為區別與預設apiserver埠,設定VIP監聽的服務埠8443 # 公有云上請使用雲負載均衡內網地址和監聽埠 MASTER_IP="192.168.5.200" KUBE_APISERVER="https://{{ MASTER_IP }}:8443" #TLS Bootstrapping 使用的 Token,使用 head -c 16 /dev/urandom | od -An -t x | tr -d ' ' 生成 BOOTSTRAP_TOKEN="8c8dfa79792f34d7f62c4df15acdb07a" # 叢集網路外掛,目前支援calico, flannel, kube-router CLUSTER_NETWORK="calico" # 預設使用kube-proxy, 可選SERVICE_PROXY="IPVS" (前提是網路選擇kube-router) SERVICE_PROXY="kube-proxy" # 服務網段 (Service CIDR),注意不要與內網已有網段衝突 SERVICE_CIDR="10.68.0.0/16" # POD 網段 (Cluster CIDR),注意不要與內網已有網段衝突 CLUSTER_CIDR="172.20.0.0/16" # 服務埠範圍 (NodePort Range) NODE_PORT_RANGE="20000-40000" # kubernetes 服務 IP (預分配,一般是 SERVICE_CIDR 中第一個IP) CLUSTER_KUBERNETES_SVC_IP="10.68.0.1" # 叢集 DNS 服務 IP (從 SERVICE_CIDR 中預分配) CLUSTER_DNS_SVC_IP="10.68.0.2" # 叢集 DNS 域名 CLUSTER_DNS_DOMAIN="cluster.local." # etcd 叢集間通訊的IP和埠, 根據etcd組成員自動生成 TMP_NODES="{% for h in groups['etcd'] %}{{ hostvars[h]['NODE_NAME'] }}=https://{{ h }}:2380,{% endfor %}" ETCD_NODES="{{ TMP_NODES.rstrip(',') }}" # etcd 叢集服務地址列表, 根據etcd組成員自動生成 TMP_ENDPOINTS="{% for h in groups['etcd'] %}https://{{ h }}:2379,{% endfor %}" ETCD_ENDPOINTS="{{ TMP_ENDPOINTS.rstrip(',') }}" # 叢集basic auth 使用的使用者名稱和密碼 BASIC_AUTH_USER="admin" BASIC_AUTH_PASS="ctsi1234" # ---------附加引數-------------------- #預設二進位制檔案目錄 bin_dir="/opt/kube/bin" #證書目錄 ca_dir="/etc/kubernetes/ssl" #部署目錄,即 ansible 工作目錄,建議不要修改 base_dir="/etc/ansible" #私有倉庫 harbor伺服器 (域名或者IP) #HARBOR_IP="192.168.1.8" #HARBOR_DOMAIN="harbor.yourdomain.com"
2.4 部署叢集
在部署節點執行 (失敗的步驟,多執行幾次就好了)
cd /etc/ansible
ansible all -m ping
# 分步安裝
ansible-playbook 01.prepare.yml
ansible-playbook 02.etcd.yml
ansible-playbook 03.docker.yml
ansible-playbook 04.kube-master.yml
ansible-playbook 05.kube-node.yml
ansible-playbook 06.network.yml
ansible-playbook 07.cluster-addon.yml
# 一步安裝
ansible-playbook 90.setup.yml
2.5 後期配置
預設,ansible 把相關命令檔案都放到 /opt/kube/bin 下了,我們可以配置下環境變數,便於直接使用
在 /etc/profile 末尾追加
export PATH=.:/opt/kube/bin:$PATH
然後,執行 source /etc/profile
這樣就可以直接執行 docker 、kubectl 等命令了
2.6 部署 dashboard
kubectl create -f /etc/ansible/manifests/dashboard/kubernetes-dashboard.yaml
kubectl create -f /etc/ansible/manifests/dashboard/ui-admin-rbac.yaml
kubectl create -f /etc/ansible/manifests/dashboard/ui-read-rbac.yaml
建立訪問 token (admin)kubectl create -f /etc/ansible/manifests/dashboard/admin-user-sa-rbac.yaml
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
2.7 訪問 dashboard
檢視訪問地址
kubectl cluster-info
瀏覽器開啟:
https://192.168.5.200:8443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy
選擇 令牌 登陸,輸入剛才檢視的 token,即可登入系統
======
特別說明:
叢集節點是需要下載一些映象的,不過映象被替換了地址,國內就可以獲得,機器能聯網即可
REPOSITORY TAG IMAGE ID CREATED SIZE
calico/node v3.0.6 15f002a49ae8 2 months ago 248MB
calico/cni v2.0.5 b5e5532af766 2 months ago 69.1MB
mirrorgooglecontainers/pause-amd64 3.1 da86e6ba6ca1 6 months ago 742kB
mirrorgooglecontainers/kubernetes-dashboard-amd64 v1.8.3 0c60bcf89900 4 months ago 102MB
calico/kube-controllers v2.0.4 f8e683e673ec 2 months ago 55.1MB