1.服務器規划
為配置Kubesphere高可用集群,需要三台或三台以上機器作為Master節點,每台機器既可以作為Master也可以作為Worker節點。其中Master節點數量建議為單數。該示例中采用三台服務器,即作為Master節點也作為Worker節點,配置如下:
服務名稱 | IP地址 | 節點類型 | 服務器 | 掛接磁盤 |
---|---|---|---|---|
node1 | 192.168.1.103 | master、worker | 8核心CPU 16G內存 400G系統磁盤 | 300G |
node2 | 192.168.1.104 | master、worker | 8核心CPU 16G內存 400G系統磁盤 | 300G |
node3 | 192.168.1.105 | master、worker | 8核心CPU 16G內存 400G系統磁盤 | 300G |
2. 配置系統設置
2.1. 配置root賬戶登錄
設置管理員賬戶登錄密碼
sudo passwd root
切換至管理員賬戶
su
配置ssh文件
vim /etc/ssh/sshd_config
按i是開啟編輯模式
找到內容PermitRootLogin without-password 修改為PermitRootLogin yes
ESC鍵退出編輯模式
:wq(保存並退出編輯)
ip addr (查詢IP地址)
使用ip地址鏈接FinalShell
2.2. 設置ubuntu20.04 設置靜態IP
cd /etc/netplan/ (cd進入到下層文件, 找到netplan下面的文件夾)
假設IP地址修改為192.168.1.100,子網掩碼24位即255.255.255.0,網關設置為192.168.1.1,DNS1:223.5.5.5,DNS2:223.6.6.6
network: ethernets: ens33: dhcp4: no addresses: [192.168.1.100/24] optional: true gateway4: 192.168.1.1 nameservers: addresses: [223.5.5.5,223.6.6.6] version: 2
應用配置
sudo netplan apply
3. 安裝Docker及依賴軟件
安裝docker 命令
curl -sSL https://get.daocloud.io/docker | sh
安裝K8S依賴的軟件
apt-get install -y conntrack socat ebtables ipset
配置阿里雲鏡像加速器
登錄阿里雲>控制台>鏡像工具>鏡像加速器 找到對應操作系統命令並在服務器中執行
如Ubuntu:
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://chn4ef4v.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
4. 使用Kubekey安裝Kubernetes
參考:https://github.com/kubesphere/kubekey/blob/master/README_zh-CN.md
具體步驟如下:
在官網下載最新版Kubekey:https://github.com/kubesphere/kubekey/releases
選擇Linux AMD64的tar.gz包如下圖:
在node1中創建文件夾並將上一步下載的文件上傳至該文件夾
# 創建K8S要下載文件的目錄 mkdir kubekey # 到k8s目錄下 cd kubekey
將下載的kubekey-v1.2.0-linux-amd64.tar.gz文件上傳至當前文件夾
解壓縮文件:
tar -zxvf kubekey-v1.2.0-linux-amd64.tar.gz
可刪除kk文件外的其他文件
給kk文件授權:
chmod 777 ./kk
創建配置文件
./kk create config
依據實際情況修改配置文件
使用配置文件創建集群
./kk create cluster -f /root/kubekey/config-sample.yaml
此過程會因為獲取GitHub地址失敗多次報錯,報錯時會顯示錯誤鏈接,需手動下載指定鏈接的文件上傳到安裝目錄並重新運行創建集群命令直至安裝完成
等待創建完成
查看節點狀態:
kubectl get node
等待所有節點為Ready狀態則Kubenetes安裝成功
5. 分布式文件系統
5.1. 配置無密碼SSH登錄
1. 通過運行以下命令在 server1 上創建密鑰。直接按回車鍵跳過所有提示。
ssh-keygen
一直按回車到命令結束
2. 將密鑰復制到所有 GlusterFS 節點。
ssh-copy-id root@node1
ssh-copy-id root@node2
ssh-copy-id root@node3
3. 請驗證您可以從 server1 通過無密碼登錄訪問所有服務器機器。
ssh root@node1
ssh root@node2
ssh root@node3
5.2. 在所有服務器機器上安裝 GlusterFS
1. 運行以下命令在 所有 上安裝 software-properties-common。
apt-get install software-properties-common -y
2. 添加社區 GlusterFS PPA。
add-apt-repository ppa:gluster/glusterfs-7
3. 請確保使用的是最新安裝包。
apt-get update
4. 安裝 GlusterFS 服務器。
apt-get install glusterfs-server -y
5. 請確保也在 node2 和 node3 上運行上述命令,並在所有機器上驗證安裝包版本。
glusterfs -V
5.3. 加載內核模塊
1. 運行以下命令在 node1 上加載三個必要的內核模塊。
echo dm_thin_pool | sudo tee -a /etc/modules
echo dm_snapshot | sudo tee -a /etc/modules
echo dm_mirror | sudo tee -a /etc/modules
2. 安裝 thin-provisioning-tools。
apt-get -y install thin-provisioning-tools
3. 請確保您也在 node2 和 node3 上運行以上命令。
iptables -I INPUT -p all -s '192.168.1.103' -j ACCEPT iptables -I INPUT -p all -s '192.168.1.104' -j ACCEPT iptables -I INPUT -p all -s '192.168.1.105' -j ACCEPT
4, 啟動glusterfs
service glusterd start
5. 設置glusterfs自啟動
systemctl enable glusterd
5.4. 創建 GlusterFS 集群
1. 在 server1 上運行以下命令添加其他節點並創建集群。
gluster peer probe node2
gluster peer probe node3
2. 請驗證集群中的所有節點均已成功連接。
gluster peer status
預計輸出如下:
Number of Peers: 2 Hostname: node2 Uuid: e1192d6a-b65e-4ce8-804c-72d9425211a6 State: Peer in Cluster (Connected) Hostname: node3 Uuid: 9bd733e4-96d4-49d5-8958-6c947a2b4fa6 State: Peer in Cluster (Connected)
5.5. 安裝 Heketi
tar zxvf heketi-v10.4.0-release-10.linux.amd64.tar.gz
3. 拷貝命令
cd heketi cp heketi /usr/bin cp heketi-cli /usr/bin
4. 創建 Heketi 服務文件。
vi /lib/systemd/system/heketi.service
寫入以下內容:
[Unit] Description=Heketi Server [Service] Type=simple WorkingDirectory=/var/lib/heketi ExecStart=/usr/bin/heketi --config=/etc/heketi/heketi.json Restart=on-failure StandardOutput=syslog StandardError=syslog [Install] WantedBy=multi-user.target
5. 創建 Heketi 文件夾。
mkdir -p /var/lib/heketi
mkdir -p /etc/heketi
6. 創建 JSON 文件以配置 Heketi。
vi /etc/heketi/heketi.json
寫入以下內容:
{ "_port_comment": "Heketi Server Port Number", "port": "18080", "_use_auth": "Enable JWT authorization. Please enable for deployment", "use_auth": false, "_jwt": "Private keys for access", "jwt": { "_admin": "Admin has access to all APIs", "admin": { "key": "123456" }, "_user": "User only has access to /volumes endpoint", "user": { "key": "123456" } }, "_glusterfs_comment": "GlusterFS Configuration", "glusterfs": { "_executor_comment": [ "Execute plugin. Possible choices: mock, ssh", "mock: This setting is used for testing and development.", " It will not send commands to any node.", "ssh: This setting will notify Heketi to ssh to the nodes.", " It will need the values in sshexec to be configured.", "kubernetes: Communicate with GlusterFS containers over", " Kubernetes exec api." ], "executor": "ssh", "_sshexec_comment": "SSH username and private key file information", "sshexec": { "keyfile": "/root/.ssh/id_rsa", "user": "root" }, "_kubeexec_comment": "Kubernetes configuration", "kubeexec": { "host" :"https://kubernetes.host:8443", "cert" : "/path/to/crt.file", "insecure": false, "user": "kubernetes username", "password": "password for kubernetes user", "namespace": "Kubernetes namespace", "fstab": "Optional: Specify fstab file on node. Default is /etc/fstab" }, "_db_comment": "Database file name", "db": "/var/lib/heketi/heketi.db", "brick_max_size_gb" : 1024, "brick_min_size_gb" : 1, "max_bricks_per_volume" : 33, "_loglevel_comment": [ "Set log level. Choices are:", " none, critical, error, warning, info, debug", "Default is warning" ], "loglevel" : "debug" } }
7. 啟動 Heketi。
systemctl start heketi
8. 檢查 Heketi 的狀態。
systemctl status heketi
9. 設置自啟動
systemctl enable heketi
10. GlusterFS需要一個空白盤做為存儲磁盤
fdisk -l
例如空白盤為/dev/sdb
vi /etc/heketi/topology.json
寫入以下內容注意IP地址和磁盤分區按實際情況修改
{ "clusters": [ { "nodes": [ { "node": { "hostnames": { "manage": [ "192.168.1.103" ], "storage": [ "192.168.1.103" ] }, "zone": 1 }, "devices": [ "/dev/sdb" ] }, { "node": { "hostnames": { "manage": [ "192.168.1.104" ], "storage": [ "192.168.1.104" ] }, "zone": 1 }, "devices": [ "/dev/sdb" ] }, { "node": { "hostnames": { "manage": [ "192.168.1.105" ], "storage": [ "192.168.1.105" ] }, "zone": 1 }, "devices": [ "/dev/sdb" ] } ] } ] }
12. 加載 Heketi JSON 文件。
export HEKETI_CLI_SERVER=http://localhost:18080
heketi-cli -s $HEKETI_CLI_SERVER --user admin --secret '123456' topology load --json=/etc/heketi/topology.json
Creating cluster ... ID: fc4a237cceaf33bc14ce9fdc2cf2e86c Allowing file volumes on cluster. Allowing block volumes on cluster. Creating node 192.168.1.103 ... ID: 6e1023d99c7c5a34fe21b90644809183 Adding device /dev/sdb ... OK Creating node 192.168.1.104 ... ID: 0aad2a60a7f178226158d86c2d1a6805 Adding device /dev/sdb ... OK Creating node 192.168.1.105 ... ID: 87576f0f26aa63c6e627e49d0bff1a46 Adding device /dev/sdb ... OK
13. 查看部署情況:
heketi-cli cluster info fc4a237cceaf33bc14ce9fdc2cf2e86c --user admin --secret '123456'
注意info中的ID和上一步輸出的cluster ID一致
Cluster id: fc4a237cceaf33bc14ce9fdc2cf2e86c Nodes: 0aad2a60a7f178226158d86c2d1a6805 6e1023d99c7c5a34fe21b90644809183 87576f0f26aa63c6e627e49d0bff1a46 Volumes: Block: true
6. 配置SC
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: mysc provisioner: kubernetes.io/glusterfs reclaimPolicy: Retain parameters: gidMax: "50000" gidMin: "40000" resturl: http://192.168.1.103:18080 volumetype: replicate:3 restauthenabled: "true" restuser: "admin" restuserkey: "123456"
執行該文件:
kubectl apply -f sc.yml
設置mysc為默認
kubectl patch storageclass mysc -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
查看sc
kubectl get sc
7. 部署Kubesphere
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.2.1/kubesphere-installer.yaml kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.2.1/cluster-configuration.yaml
上面命令會可能會因為GitHub無法訪問導致失敗,可將這兩個文件下載到本地再上傳至服務器,然后執行以下命令
kubectl apply -f 文件名
完成后稍等半分鍾左右,可執行以下命令查看安裝日志:
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f

部署完成后訪問Kubesphere控制台:http://192.168.1.103:30880 用戶名:admin,密碼:P@88w0rd