Linux下部署Kubernetes+Kubesphere詳細教程


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. 分布式文件系統

在安裝Kubesphere前,需要部署分布式文件系統用於容器K8S持久化,並配置存儲類型。這里選擇Kubesphere官網推薦的Glusterfs

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
如果不需要輸入密碼則配置成功,每次鏈接成功后需要使用exit命令退回原服務器

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

1. 在https://github.com/heketi/heketi/releases/中找到heketi最新版服務端版本並下載,例如 https://github.com/heketi/heketi/releases/download/v10.4.0/heketi-v10.4.0-release-10.linux.amd64.tar.gz
將該文件上傳到node1
2. 解壓縮該文件
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查看磁盤分配情況
fdisk -l

例如空白盤為/dev/sdb

11. 為 Heketi 創建拓撲配置文件,該文件包含添加到 Heketi 的集群、節點和磁盤的信息。
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

編寫sc.yml:
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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM