前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >轻量化安装 TKEStack:让已有 K8s 集群拥有企业级容器云平台的能力

轻量化安装 TKEStack:让已有 K8s 集群拥有企业级容器云平台的能力

作者头像
腾讯云原生
发布2022-04-14 09:41:54
7250
发布2022-04-14 09:41:54
举报

王龙,腾讯云后台开发工程师,负责 TKEStack 的设计开发维护及混合云项目相关工作。

前言

TKEStack[1] 是一个开源的企业级容器云平台,结合最前沿的先进技术,提供高度可扩展的高性能容器管理服务,可以让您轻松地在任何地方运行 Kubernetes、满足 IT 需求并为 DevOps 团队赋能

TKEStack 提供了丰富的组件实现用户管理、访问策略管理、集群管理、业务管理、监控、日志、私有镜像库等功能,这也相应地增加了在本地安装 TKEStack 的时间。对于部分用户来说,可能只需要 TKEStack 的用户管理、集群管理、控制台访问等核心功能,但也要付出一样的时间成本。另外,TKEStack 安装过程中会在裸机上部署 global 集群,并通过 global 集群管理独立集群和导入集群的生命周期。因此对于已有的 K8s 集群,用户无法对其安装集成 TKEStack。

基于上述背景,TKEStack 在最新的 v1.9.0 release 中,支持了轻量化安装场景。轻量化安装打破了需要新建 global 集群的限制,实现了在用户已有的 K8s 集群上直接集成 TKESatck 的用户管理、集群管理、控制台访问等核心功能。用户由此可以通过前端可视化页面,查看并管理集群的基本信息、工作节点、命名空间、工作负载等各种资源。除此之外,通过设置自定义访问策略,打破了”单租户“的限制,用户可以实现对集群灵活的权限控制。

前置要求

  • 本文介绍的内容是建立在已有一个正常运行的 K8s 集群的基础上,并且以下的操作需要在 master 节点上进行。如果没有 K8s 集群,可以通过 kind[2] 创建本地集群并进行以下的操作。
  • 本文介绍的内容需要通过 helm[3] 安装 TKEStack 的核心组件,可参考 安装手册[4] 安装 helm。

轻量化安装 TKEStack

1、准备安装文件

通过如下命令拉取 TKEStack 的最新代码:

代码语言:javascript
复制
git clone https://github.com/tkestack/tke.git

2、创建本地集群(已有本地集群的可跳过该步骤)

如果用户本地没有 K8s 集群,可通过 kind 进行创建。由于 kind 创建的集群实际运行在镜像容器中,为了确保 TKEStack 核心组件的端口能够从容器外部正常访问,切换到 TKEStack 代码的 hack/lightweight-install/ 目录,执行如下命令创建集群:

代码语言:javascript
复制
kind create cluster --config kindConfig.yaml --name {your cluster name} 

3、创建指定 namespace

tke-auth、tke-platform、tke-gateway 三个核心组件需要运行在指定的 namespace 下,执行如下命令:

代码语言:javascript
复制
kubectl create namespace tke

4、安装 chart

TKEStack 提供了 chart 文件来安装 tke-auth、tke-platform、tke-gateway 三个核心组件。

切换到 TKEStack 代码的 hack/lightweight-install/ 目录,编译二进制执行文件,用于生成安装 chart 文件所需的 yaml 文件:

代码语言:javascript
复制
go build -o gen

在 TKEStack 代码的 hack/lightweight-install/ 目录放置了需要填写的 yaml 文件 customConfig.yamlcustomConfig.yaml 文件中一些注释“必填”的参数,需要填写,其余的参数可根据需要选填,选填部分为空时会自动填充默认值。

customConfig.yaml 内容如下:

代码语言:javascript
复制
# 必填,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

代码语言:javascript
复制
./gen

会在同级目录生成 auth-chart-values.yamlplatform-chart-values.yamlgateway-chart-values.yaml 三个 yaml 文件,分别对应三个 chart(tke-auth、tke-platform、tke-gateway)在安装时需要的 values.yaml 文件。

在当前 hack/lightweight-install/ 目录下进行三个核心组件的安装:

代码语言:javascript
复制
# tke-auth 的安装
helm install -f auth-chart-values.yaml tke-auth tke-auth/
代码语言:javascript
复制
# tke-platform 的安装
helm install -f platform-chart-values.yaml tke-platform tke-platform/
代码语言:javascript
复制
# tke-gateway 的安装
helm install -f gateway-chart-values.yaml tke-gateway tke-gateway/

通过如下命令如果能查询到三个 chart 的安装状态均为 deployed,则表示核心组件安装成功:

代码语言:javascript
复制
helm list

chart 安装完成后,可以查询到以下信息,如图所示:

5、修改集群 apiserver 配置

在集群对应的目录 /etc/kubernetes/pki/ 下新建文件 tke-authz-webhook.yaml,文件内容如下(其中 cluster.server 参数中的 IP 地址需要修改为 master 的 IP 地址):

代码语言:javascript
复制
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 字段增加以下两个参数:

代码语言:javascript
复制
# 如果已有这两个参数,则将其按照以下内容修改
- --authorization-mode=Node,RBAC,Webhook
- --authorization-webhook-config-file=/etc/kubernetes/pki/tke-authz-webhook.yaml

6、创建独立集群

访问地址 http://{公网可访问ip}/tkestack,出现如下登陆界面,输入之前设置的用户名 adminUsername 和密码 adminPassword,如无设置,默认用户名为 admin ,密码为 YWRtaW4=

登陆后,点击集群管理的新建独立集群:

具体的集群创建信息可参考文档集群创建[5]

创建集群完成后,可以在页面端看到如下状态:

并且可以在 master 节点上查询到独立集群的信息:

如果在创建独立集群时,Kubernetes 版本显示暂无数据,可以通过在名为 cluster-info(namespace 为 kube-public)的 configmap 中增加如下字段解决(具体字段值可参考 hack/lightweight-install/ 目录下的 patch.yaml 文件):

代码语言:javascript
复制
data:
  k8sValidVersions: '["1.21.4-tke.1","1.20.4-tke.1"]'

总结

本文介绍了如何基于 TKEStack 最新的 v1.9.0 release 版本在已有的 K8s 集群上轻量化安装 TKEStack,并以此集成 TKEStack 的用户管理、集群管理、控制台访问等核心功能。

参考资料

[1]

TKEStack: 【https://github.com/tkestack/tke】

[2]

kind: 【https://kind.sigs.k8s.io/docs/user/quick-start/】

[3]

helm: 【https://helm.sh/zh/docs/】

[4]

安装手册: 【https://helm.sh/zh/docs/intro/install/】

[5]

集群创建: 【https://tkestack.github.io/web/zh/docs/user-guide/platform-console/cluster-mgmt/#新建独立集群】

重磅介绍

【燎原社】推出了专业而又系统的线下云原生技术实战营,需要系统化深入学习的同学,可扫码报名云原生技术实战营课程,腾讯云技术专家现场教学,3天搞定云原生容器化改造过程中的实际问题,云原生技术实战营【4.27 北京站】、【5.11 深圳站】、【5.18 上海站】火热招募中!扫码一键直达:

  往期精选推荐  

点个“在看”每天学习最新技术

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-04-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云原生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 前置要求
  • 轻量化安装 TKEStack
    • 1、准备安装文件
      • 2、创建本地集群(已有本地集群的可跳过该步骤)
        • 3、创建指定 namespace
          • 4、安装 chart
            • 5、修改集群 apiserver 配置
              • 6、创建独立集群
              • 总结
                • 参考资料
                相关产品与服务
                容器服务
                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档