輕量化安裝 TKEStack:讓已有 K8s 叢集擁有企業級容器雲平臺的能力

騰訊雲原生發表於2022-04-08

關於我們

更多關於雲原生的案例和知識,可關注同名【騰訊雲原生】公眾號~

福利:

①公眾號後臺回覆【手冊】,可獲得《騰訊雲原生路線圖手冊》&《騰訊雲原生最佳實踐》~

②公眾號後臺回覆【系列】,可獲得《15個系列100+篇超實用雲原生原創乾貨合集》,包含Kubernetes 降本增效、K8s 效能優化實踐、最佳實踐等系列。

③公眾號後臺回覆【白皮書】,可獲得《騰訊雲容器安全白皮書》&《降本之源-雲原生成本管理白皮書v1.0》

④公眾號後臺回覆【光速入門】,可獲得騰訊雲專家5萬字精華教程,光速入門Prometheus和Grafana。

作者

王龍,騰訊雲後臺開發工程師,負責 TKEStack 的設計開發維護及混合雲專案相關工作。

前言

TKEStack 是一個開源的企業級容器雲平臺,結合最前沿的先進技術,提供高度可擴充套件的高效能容器管理服務,可以讓您輕鬆地在任何地方執行 Kubernetes、滿足 IT 需求併為 DevOps 團隊賦能。

TKEStack 提供了豐富的元件實現使用者管理、訪問策略管理、叢集管理、業務管理、監控、日誌、私有映象庫等功能,這也相應地增加了在本地安裝 TKEStack 的時間。對於部分使用者來說,可能只需要 TKEStack 的使用者管理、叢集管理、控制檯訪問等核心功能,但也要付出一樣的時間成本。另外,TKEStack 安裝過程中會在裸機上部署 global 叢集,並通過 global 叢集管理獨立叢集和匯入叢集的生命週期。因此對於已有的 K8s 叢集,使用者無法對其安裝整合 TKEStack。

基於上述背景,TKEStack 在最新的 v1.9.0 release 中,支援了輕量化安裝場景。輕量化安裝打破了需要新建 global 叢集的限制,實現了在使用者已有的 K8s 叢集上直接整合 TKESatck 的使用者管理、叢集管理、控制檯訪問等核心功能。使用者由此可以通過前端視覺化頁面,檢視並管理叢集的基本資訊、工作節點、名稱空間、工作負載等各種資源。除此之外,通過設定自定義訪問策略,打破了”單租戶“的限制,使用者可以實現對叢集靈活的許可權控制。

前置要求

本文介紹的內容是建立在已有一個正常執行的 K8s 叢集的基礎上,並且以下的操作需要在 master 節點上進行。如果沒有 K8s 叢集,可以通過 kind 建立本地叢集並進行以下的操作。

本文介紹的內容需要通過 helm 安裝 TKEStack 的核心元件,可參考 安裝手冊 安裝 helm。

輕量化安裝 TKEStack

準備安裝檔案

通過如下命令拉取 TKEStack 的最新程式碼:

git clone https://github.com/tkestack/tke.git

建立本地叢集(已有本地叢集的可跳過該步驟)

如果使用者本地沒有 K8s 叢集,可通過 kind 進行建立。由於 kind 建立的叢集實際執行在映象容器中,為了確保 TKEStack 核心元件的埠能夠從容器外部正常訪問,切換到 TKEStack 程式碼的 hack/lightweight-install/ 目錄,執行如下命令建立叢集:

kind create cluster --config kindConfig.yaml --name {your cluster name} 

建立指定 namespace

tke-auth、tke-platform、tke-gateway 三個核心元件需要執行在指定的 namespace 下,執行如下命令:

kubectl create namespace tke

安裝 chart

TKEStack 提供了 chart 檔案來安裝 tke-auth、tke-platform、tke-gateway 三個核心元件。

切換到 TKEStack 程式碼的 hack/lightweight-install/ 目錄,編譯二進位制執行檔案,用於生成安裝 chart 檔案所需的 yaml 檔案:

go build -o gen

在 TKEStack 程式碼的 hack/lightweight-install/ 目錄放置了需要填寫的 yaml 檔案 customConfig.yamlcustomConfig.yaml 檔案中一些註釋“必填”的引數,需要填寫,其餘的引數可根據需要選填,選填部分為空時會自動填充預設值。

customConfig.yaml 內容如下:

# 必填,etcd 訪問地址,形式如 https://172.19.0.2:2379
etcd:
  host: https://172.18.0.2:2379 
# 必填,伺服器內網 IP,陣列形式
serverIPs:
  - 172.18.0.2
# 必填,公網可訪問的 IP 地址以及要使用的域名,陣列形式
dnsNames:
  - tke.gateway
# 必填,叢集 front-proxy-ca.crt 檔案地址,預設位置為 /etc/kubernetes/pki/front-proxy-ca.crt
frontProxyCaCrtAbsPath: /etc/kubernetes/pki/front-proxy-ca.crt
# 必填,叢集 etcd 的 ca.crt 檔案地址,預設位置為 /etc/kubernetes/pki/etcd/ca.crt
etcdCrtAbsPath: /etc/kubernetes/pki/etcd/ca.crt
# 必填,叢集 etcd 的 ca.key檔案地址,預設位置為 /etc/kubernetes/pki/etcd/ca.key
etcdKeyAbsPath: /etc/kubernetes/pki/etcd/ca.key
tke-auth:
  api:
    # 必填
    replicas: 1
    # 必填
    image: tkestack/tke-auth-api-amd64:74592a3bceb5bebca602bea21aaebf78007a3bb2
    # 必填,陣列形式,auth 的重定向訪問地址,包括叢集伺服器 IP 地址(必填)、tke-gateway 的域名(可選)、叢集高可用的 VIP 地址(可選,有的話需要填寫)和叢集的公共可訪問域名(可選,有的話需要填寫)
    redirectHosts: 
      - 172.18.0.2
    enableAudit: 
    # tke-auth-api 元件在 node 上的對外暴露埠,預設31138
    nodePort: 
    # 叢集的租戶 id,預設 default
    tenantID: 
    # OIDC 認證方式的 secret,預設自動生成
    oIDCClientSecret: 
    # authentication 使用者名稱,預設為 admin
    adminUsername: 
  controller:
    # 必填
    replicas: 1
    # 必填
    image: tkestack/tke-auth-controller-amd64:74592a3bceb5bebca602bea21aaebf78007a3bb2
    # 控制檯登陸的使用者名稱,預設為 admin
    adminUsername: 
    # 控制檯登陸的密碼,預設自動生成
    adminPassword: 
tke-platform:
  # 必填,VIP 或者公網可訪問的叢集 IP
  publicIP:
  metricsServerImage: metrics-server:v0.3.6
  addonResizerImage: addon-resizer:1.8.11
  api:
    # 必填
    replicas: 1
    # 必填
    image: tkestack/tke-platform-api-amd64:bc48bed59bff2022d87db5e1484481715357ee7c
    enableAuth: true
    enableAudit: 
    # OIDC 認證方式客戶端 id,預設為 default
    oIDCClientID: 
    # OIDC 認證方式的 issuer_url,預設為 https://tke-auth-api/oidc
    oIDCIssuerURL: 
    # 是否開啟 OIDC 認證,預設不開啟,值為空
    useOIDCCA:
  controller:
    # 必填
    replicas: 1
    # 必填
    providerResImage: tkestack/provider-res-amd64:v1.21.4-1
    # 必填
    image: tkestack/tke-platform-controller-amd64:bc48bed59bff2022d87db5e1484481715357ee7c
    # 預設為 docker.io
    registryDomain:
    # 預設為 tkestack
    registryNamespace:
    # 監控儲存型別,預設為 influxdb
    monitorStorageType: 
    # 監控儲存地址,預設為叢集 master IP 地址加8086埠
    monitorStorageAddresses:
tke-gateway:
  # 必填
  image: tkestack/tke-gateway-amd64:bc48bed59bff2022d87db5e1484481715357ee7c
  # 預設為 docker.io
  registryDomainSuffix:
  # 叢集的租戶 id,預設為 default
  tenantID:
  # OIDC 認證方式的 secret,預設自動生成
  oIDCClientSecret:
  # 是否開啟自簽名,預設為 true
  selfSigned: true
  # 第三方 cert 證書,在 selfSigned 為 false 時需要填值
  serverCrt:
  # 第三方 certKey 金鑰,在 selfSigned 為 false 時需要填值
  serverKey:
  enableAuth: true
  enableBusiness:
  enableMonitor:
  enableRegistry:
  enableLogagent:
  enableAudit:
  enableApplication:
  enableMesh:

customConfig.yaml 檔案中的引數填寫完畢後,在當前 hack/lightweight-install/ 目錄下執行 gen

./gen

會在同級目錄生成 auth-chart-values.yamlplatform-chart-values.yamlgateway-chart-values.yaml 三個 yaml 檔案,分別對應三個 chart(tke-auth、tke-platform、tke-gateway)在安裝時需要的 values.yaml 檔案。

在當前 hack/lightweight-install/ 目錄下進行三個核心元件的安裝:

# tke-auth 的安裝
helm install -f auth-chart-values.yaml tke-auth tke-auth/
# tke-platform 的安裝
helm install -f platform-chart-values.yaml tke-platform tke-platform/
# tke-gateway 的安裝
helm install -f gateway-chart-values.yaml tke-gateway tke-gateway/

通過如下命令如果能查詢到三個 chart 的安裝狀態均為 deployed,則表示核心元件安裝成功:

helm list

chart 安裝完成後,可以查詢到以下資訊,如圖所示:

修改叢集 apiserver 配置

在叢集對應的目錄 /etc/kubernetes/pki/ 下新建檔案 tke-authz-webhook.yaml,檔案內容如下(其中 cluster.server 引數中的 IP 地址需要修改為 master 的 IP 地址):

apiVersion: v1
kind: Config
clusters:
  - name: tke
    cluster:
      server: https://172.19.0.2:31138/auth/authz
      insecure-skip-tls-verify: true
users:
  - name: admin-cert
    user:
      client-certificate: /etc/kubernetes/pki/webhook.crt
      client-key: /etc/kubernetes/pki/webhook.key
current-context: tke
contexts:
- context:
    cluster: tke
    user: admin-cert
  name: tke

將二進位制執行檔案 gen 生成的 webhook.crtwebhook.key(位置在 TKEStack 程式碼下的 hack/lightweight-install/data/ 目錄)複製到叢集的對應目錄 /etc/kubernetes/pki/ 下。

修改 K8s 叢集中 /etc/kubernetes/mainfest/kube-apiserver.yaml 的內容,在 spec.containers.command 欄位增加以下兩個引數:

# 如果已有這兩個引數,則將其按照以下內容修改
- --authorization-mode=Node,RBAC,Webhook
- --authorization-webhook-config-file=/etc/kubernetes/pki/tke-authz-webhook.yaml

建立獨立叢集

訪問地址 http://{公網可訪問ip}/tkestack,出現如下登陸介面,輸入之前設定的使用者名稱 adminUsername 和密碼 adminPassword,如無設定,預設使用者名稱為 admin ,密碼為 YWRtaW4=

登陸後,點選叢集管理的新建獨立叢集:

具體的叢集建立資訊可參考文件叢集建立

建立叢集完成後,可以在頁面端看到如下狀態:

並且可以在 master 節點上查詢到獨立叢集的資訊:

如果在建立獨立叢集時,Kubernetes 版本顯示暫無資料,可以通過在名為 cluster-info(namespace 為 kube-public)的 configmap 中增加如下欄位解決(具體欄位值可參考 hack/lightweight-install/ 目錄下的 patch.yaml 檔案):

data:
  k8sValidVersions: '["1.21.4-tke.1","1.20.4-tke.1"]'

總結

本文介紹瞭如何基於 TKEStack 最新的 v1.9.0 release 版本在已有的 K8s 叢集上輕量化安裝 TKEStack,並以此整合 TKEStack 的使用者管理、叢集管理、控制檯訪問等核心功能。

【騰訊雲原生】雲說新品、雲研新術、雲遊新活、雲賞資訊,掃碼關注同名公眾號,及時獲取更多幹貨!!

相關文章