使用ansible部署K8S1.18集羣並使用Kubesphere 3.0.0實現devops、日誌收集、灰度發佈、告警監控

離線安裝集羣

參考 https://github.com/easzlab/kubeasz/blob/master/docs/setup/offline_install.mdhtml

離線文件準備

在一臺可以訪問互聯網的服務器上執行:node

  • 下載工具腳本easzup,舉例使用kubeasz版本2.2
export release=2.2.1
curl -C- -fLO --retry 3 https://github.com/easzlab/kubeasz/releases/download/${release}/easzup
chmod +x ./easzup
  • 使用工具腳本下載

默認下載最新推薦k8s/docker等版本,使用命令./easzup 查看工具腳本的幫助信息linux

# 舉例使用 k8s 版本 v1.18.2,docker 19.03.5
./easzup -D -d 19.03.5 -k v1.18.2
# 下載離線系統軟件包
./easzup -P
執行成功後,全部文件均已整理好放入目錄/etc/ansible
,只要把該目錄總體複製到任何離線的機器上,便可開始安裝集羣,離線文件包括:
  • /etc/ansible 包含 kubeasz 版本爲 ${release} 的發佈代碼
  • /etc/ansible/bin 包含 k8s/etcd/docker/cni 等二進制文件
  • /etc/ansible/down 包含集羣安裝時須要的離線容器鏡像
  • /etc/ansible/down/packages 包含集羣安裝時須要的系統基礎軟件

離線文件不包括:git

  • 管理端 ansible 安裝,但可使用 kubeasz 容器運行 ansible 腳本
  • 其餘更多 kubernetes 插件鏡像

離線安裝

上述下載完成後,把/etc/ansible整個目錄複製到目標離線服務器相同目錄,而後在離線服務器上運行:github

  • 離線安裝 docker,檢查本地文件,正常會提示全部文件已經下載完成
./easzup -D
  • 啓動 kubeasz 容器
./easzup -S
  • 設置參數容許離線安裝
sed -i 's/^INSTALL_SOURCE.*$/INSTALL_SOURCE: "offline"/g' /etc/ansible/roles/chrony/defaults/main.yml
sed -i 's/^INSTALL_SOURCE.*$/INSTALL_SOURCE: "offline"/g' /etc/ansible/roles/ex-lb/defaults/main.yml
sed -i 's/^INSTALL_SOURCE.*$/INSTALL_SOURCE: "offline"/g' /etc/ansible/roles/kube-node/defaults/main.yml
sed -i 's/^INSTALL_SOURCE.*$/INSTALL_SOURCE: "offline"/g' /etc/ansible/roles/prepare/defaults/main.yml

在kubeasz容器內執行k8s的安裝docker

docker exec -it kubeasz easzctl start-aio

若是須要配置1主多從的集羣json

#配置ssh登陸node節點
ssh-copy-id root@192.168.11.11
#進入kubeasz容器中執行添加節點命令
docker exec -it kubeasz bash
#執行添加節點命令
easzctl add-node 192.168.11.11

若是當前linux內核版本在4.4如下,kube-proxy的ipvs可能會有問題,致使dns沒法解析vim

解決問題bash

一、升級系統內核版本服務器

升級 Kubernetes 集羣各個節點的 CentOS 系統內核版本:

## 載入公鑰 

$ rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org 

## 安裝 ELRepo 最新版本

$ yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm 

## 列出可使用的 kernel 包版本 

$ yum list available --disablerepo=* --enablerepo=elrepo-kernel 

## 安裝指定的 kernel 版本: 

$ yum install -y kernel-lt-4.4.231-1.el7.elrepo --enablerepo=elrepo-kernel

 ## 設置開機重新內核啓動

$ grub2-set-default "CentOS Linux (4.4.231-1.el7.elrepo.x86_64) 7 (Core)"

## 查看內核啓動項 

$ grub2-editenv list saved_entry=CentOS Linux (4.4.231-1.el7.elrepo.x86_64) 7 (Core)

重啓系統使內核生效:

$ reboot

啓動完成查看內核版本是否更新:

$ uname -r 4.4.231-1.el7.elrepo.x86_64

參考:http://www.mydlq.club/article/78/

 

部署NFS服務,添加爲k8s默認storageclass

nfs服務端安裝

使用 yum 安裝 NFS 安裝包。

$ sudo yum install nfs-utils

注意

只安裝 nfs-utils 便可,rpcbind 屬於它的依賴,也會安裝上。

服務端配置

設置 NFS 服務開機啓動

$ sudo systemctl enable rpcbind $ sudo systemctl enable nfs

啓動 NFS 服務

$ sudo systemctl start rpcbind $ sudo systemctl start nfs

防火牆須要打開 rpc-bind 和 nfs 的服務

$ sudo firewall-cmd --zone=public --permanent --add-service={rpc-bind,mountd,nfs} success $ sudo firewall-cmd --reload success

配置共享目錄

服務啓動以後,咱們在服務端配置一個共享目錄

$ sudo mkdir /data $ sudo chmod 755 /data

根據這個目錄,相應配置導出目錄

$ sudo vi /etc/exports

添加以下配置

/data/ 192.168.0.0/24(rw,sync,no_root_squash,no_all_squash)

/data: 共享目錄位置。
192.168.0.0/24: 客戶端 IP 範圍,* 表明全部,即沒有限制。
rw: 權限設置,可讀可寫。
sync: 同步共享目錄。
no_root_squash: 可使用 root 受權。
no_all_squash: 可使用普通用戶受權。
:wq 保存設置以後,重啓 NFS 服務。

$ sudo systemctl restart nfs

能夠檢查一下本地的共享目錄

$ showmount -e localhost Export list for localhost: /data 192.168.0.0/24

這樣,服務端就配置好了,接下來配置客戶端,鏈接服務端,使用共享目錄。

 

爲k8s添加動態PV

#編輯自定義配置文件:
$ vim /etc/ansible/roles/cluster-storage/defaults/main.yml
# 好比建立nfs provisioner
storage:
  nfs:
    enabled: "yes"
    server: "192.168.1.8"
    server_path: "/data/nfs"
    storage_class: "nfs-dynamic-class"
    provisioner_name: "nfs-provisioner-01"
#建立 nfs provisioner
$ docker exec -it kubeasz bash
$ ansible-playbook /etc/ansible/roles/cluster-storage/cluster-storage.yml
$ kubectl patch storageclass nfs-dynamic-class -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
# 執行成功後驗證
$ kubectl get pod --all-namespaces |grep nfs-prov
kube-system   nfs-provisioner-01-6b7fbbf9d4-bh8lh        1/1       Running   0          1d
注意 k8s集羣可使用多個nfs provisioner,重複上述步驟一、2:修改使用不一樣的nfs server nfs_storage_class nfs_provisioner_name後執行建立便可。

 

開始部署Kubesphere 3.0.0測試版本

參考:https://github.com/kubesphere/ks-installer

準備工做

集羣現有的可用內存至少在 10G 以上。 若是是執行的 allinone 安裝,那麼執行 free -g 能夠看下可用資源

$ free -g
              total        used        free      shared  buff/cache   available
Mem:              16          4          10           0           3           2
Swap:             0           0           0

部署 KubeSphere

最小化快速部署

kubectl apply -f https://raw.githubusercontent.com/kubesphere/ks-installer/v3.0.0-alpha.2/deploy/kubesphere-installer.yaml
kubectl apply -f https://raw.githubusercontent.com/kubesphere/ks-installer/v3.0.0-alpha.2/deploy/cluster-configuration.yaml

 # 查看部署進度及日誌
 $ kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f

部署完成後可執行以下命令查看控制檯的服務端口,使用 IP:consolePort(default: 30880) 訪問 KubeSphere UI 界面,默認的集羣管理員帳號爲 admin/P@88w0rd

kubectl get svc/ks-console -n kubesphere-system

以上爲最小化部署,如需開啓更多功能,請參考以下步驟配置相關依賴:

安裝可插拔功能組件

  1. 編輯 ClusterConfiguration 開啓可插拔的功能組件:
#編輯k8s的clusterconfig,將未開啓的日誌收集、告警監控、devops等功能按需開啓(對應enable設置爲true)
kubectl edit cc ks-installer -n kubesphere-system

按功能需求編輯配置文件以後,退出等待生效便可,如長時間未生效請使用以下命令查看相關日誌:

kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
相關文章
相關標籤/搜索