轻量化安装 TKEStack:让已有 K8s 集群拥有企业级容器云平台的能力
关于我们
更多关于云原生的案例和知识,可关注同名【腾讯云原生】公众号~
福利:
①公众号后台回复【手册】,可获得《腾讯云原生路线图手册》&《腾讯云原生最佳实践》~
②公众号后台回复【系列】,可获得《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.yaml。customConfig.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.yaml、platform-chart-values.yaml、gateway-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.crt 和 webhook.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 的用户管理、集群管理、控制台访问等核心功能。
【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!
轻量化安装 TKEStack:让已有 K8s 集群拥有企业级容器云平台的能力的更多相关文章
- k8s集群Job Pod 容器可能因为多种原因失效,想要更加稳定的使用Job负载,有哪些需要注意的地方?
k8s集群Job Pod 容器可能因为多种原因失效,想要更加稳定的使用Job负载,有哪些需要注意的地方? 面试官:"计数性Job默认完成模式是什么?Indexed模式如何发布自定义索引呢?& ...
- 如何使用helm优雅安装prometheus-operator,并监控k8s集群微服务
前言:随着云原生概念盛行,对于容器.服务.节点以及集群的监控变得越来越重要.Prometheus 作为 Kubernetes 监控的事实标准,有着强大的功能和良好的生态.但是它不支持分布式,不支持数据 ...
- 企业运维实践-还不会部署高可用的kubernetes集群?使用kubeadm方式安装高可用k8s集群v1.23.7
关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 文章目录: 0x00 前言简述 ...
- K8S集群Master高可用实践
K8S集群Master高可用实践 https://blog.51cto.com/ylw6006/2164981 本文将在前文基础上介绍k8s集群的高可用实践,一般来讲,k8s集群高可用主要包含以 ...
- 菜鸟系列k8s——快速部署k8s集群
快速部署k8s集群 1. 安装Rancher Rancher是业界唯一完全开源的企业级容器管理平台,为企业用户提供在生产环境中落地使用容器所需的一切功能与组件. Rancher2.0基于Kuberne ...
- NVIDIA-GPU归入K8S集群管理的安装文档--第二版
一,nvidia K80驱动安装 1, 查看服务器上的Nvidia(英伟达)显卡信息,命令lspci |grep NVIDIA 2, 按下来,进行显卡驱动程序的安装,驱动程序可到nvidia的官网 ...
- 冰河教你一次性成功安装K8S集群(基于一主两从模式)
写在前面 研究K8S有一段时间了,最开始学习K8S时,根据网上的教程安装K8S环境总是报错.所以,我就改变了学习策略,先不搞环境搭建了.先通过官网学习了K8S的整体架构,底层原理,又硬啃了一遍K8S源 ...
- Kubernetes全栈架构师(Kubeadm高可用安装k8s集群)--学习笔记
目录 k8s高可用架构解析 Kubeadm基本环境配置 Kubeadm系统及内核升级 Kubeadm基本组件安装 Kubeadm高可用组件安装 Kubeadm集群初始化 高可用Master及Token ...
- Kubernetes全栈架构师(二进制高可用安装k8s集群部署篇)--学习笔记
目录 二进制高可用基本配置 二进制系统和内核升级 二进制基本组件安装 二进制生成证书详解 二进制高可用及etcd配置 二进制K8s组件配置 二进制使用Bootstrapping自动颁发证书 二进制No ...
随机推荐
- 原生JS实现拼图游戏
最近无聊,练练原生JS:实现拼图游戏.两种玩法:第一种是单击元素进行交换位置:第二种是拖拽元素进行位置交换.首先需要上传图片并进行回显(需要用到FileReader):下面是部分截图: 可以自行设置切 ...
- 构建 Go 应用 docker 镜像的十八种姿势
修炼背景 我夜以继日,加班加点开发了一个最简单的 Go Hello world 应用,虽然只是跑了打印一下就退出了,但是老板也要求我上线这个我能写出的唯一应用. 项目结构如下: . ├── go.mo ...
- Linux-Centos7学习笔记
镜像下载.域名解析.时间同步请点击阿里云开源镜像站 下载.安装与配置 下载 下载Centos镜像,网站见参考 点击大的版本,例如7,再选择isos进行下载 安装 这里使用的VMware 12 Pro, ...
- rancher更新集群证书
进入rancher 等待更新完成 查看证书到期时间 >>>在rancher容器内部执行查看集群证书信息 for i in ls /var/lib/rancher/k3s/server ...
- SQLMap参数命令
SQLMap参数命令 --method=<http方法> 指定使用的http方法 --data=<post数据> 提交post数据并对post数据进行测试 --param- ...
- select、poll和epoll的区别
操作系统在处理io的时候,主要有两个阶段: 等待数据传到io设备 io设备将数据复制到user space 我们一般将上述过程简化理解为: 等到数据传到kernel内核space kernel内核区域 ...
- Mycat 数据切分 看这一篇就够了
数据切分 数据切分指的是通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库上面,以达到分散单台设备负载的效果. 数据的切分根据其切分规则的类型,可以分为两种切分模式.一种 ...
- 12.9 supper
Super super的注意事项 super可以用来在子类中访问父类的public属性或方法,super只能出现在子类中. super()调用的是父类的默认无参构造,super(参数)可以调用父类的有 ...
- Python中的鸭子类型
今天,我们来聊一聊Python中的鸭子类型(duck typing). 编程语言具有类型概念,例如Python中有数字类型.字符串类型.布尔类型,或者更加复杂的结构,例如元组tuple.列表list. ...
- JVM分析工具与查看命令
1.概述 无可避免地,我们都需要用到多线程的一天.单纯地使用多线程的参数设置,比如-Xms.-Xmx.-Xss等,还不足够,我们还要学会如何分析JVM里面的线程状况. 在进行java程序问题定位时,内 ...
