K3S系列文章-使用AutoK3s在腾讯云上安装高可用K3S集群
开篇
- 《K3s 系列文章》
- 《Rancher 系列文章》
方案
在腾讯云上安装 K3S
后续会在这套 K3S 集群上安装 Rancher
方案目标
- 高可用
- 3 台master 的 k3s 集群
- 数据备份
- k3s 数据备份到 腾讯云对象存储 cos
- 尽量复用公有云的能力
- Tencent Cloud Controller Manager ( 因为腾讯云已经放弃维护相关源码, 所以无法复用)
- SVC LoadBalancer 调用 CLB ( 因为腾讯云已经放弃维护相关源码, 所以无法复用)
- 备份 - 使用腾讯云 COS
前提条件
有腾讯云账户,账户至少拥有如下权限:auto k3s 安装 - 设置 CAM 以及这些权限:
QcloudTAGFullAccess
该腾讯云账号有对应的 API 密钥,地址:访问密钥 - 控制台 (tencent.com) ,或者拥有相关权限:
cam:QueryCollApiKey
和cam:CreateCollApiKey
一台 linux 操作机,用于部署 autok3s
一个对象存储通 cos,用于备份
已有的镜像仓库的一些账号密码或认证信息,包括:quay,docker,腾讯云 (用于加速 pull push镜像)
️ Info:
腾讯云 tcr 广州 提供免费个人版实例,可以使用并添加:
K3S 安装注意事项
- 通过autok3s部署
- 通过 autok3s 安装后, 默认 k8s api 通过 公网 IP 进行通信, 需要调整 systemd 配置使其通过内网进行通信.
- ️付费模式,安装后可根据具体情况在将付费模式控制台改为:包年包月
K3S 安装参数
本次 K3s 安装参数如下:
- Master
3
台 - Worker:
0
- Region:shanghai (
ap-shanghai
) - zone:二区(
ap-shanghai-2
) - Instance Type:
S5.MEDIUM8
- Image:
img-22trbn9x
(ubuntu 20.04) - instanceChargeType:默认后付费,且无法调整。️安装后控制台改为:PREPAID
- Disk:
CLOUD_SSD
(️CLOUD_PREMIUM
(高性能云盘),CLOUD_SSD
(SSD云硬盘)) - Disk Size:
50
G - VPC ID: 空(autok3s 会自动创建)
- Subnet ID: 空(autok3s 会自动创建)
- Internet Max Bandwidth Out:
5
(可以按需调小) - Security Group Ids:空, 让 autok3s 自动创建, 集群创建好之后再调整安全组, 缩小入口范围
- EIP:是否使用弹性公网IP
false
- Tags (见下文)
- K3s Version:
v1.21.7+k3s1
- Cluster:
true
- Master Extra Args: 见下文
- Cluster模式:
true
- Registry(见下文)
- UI:
true
️ Warning:
执行
autok3s
创建前, 如果选择已有的安全组, 那么 CVM 实例至少需要应用以下安全组规则:Rule Protocol Port Source Description
InBound TCP 22 ALL SSH Connect Port
InBound TCP 6443 K3s agent nodes Kubernetes API
InBound TCP 10250 K3s server & agent Kubelet
InBound UDP 8472 K3s server & agent (Optional) Required only for Flannel VXLAN
InBound TCP 2379,2380 K3s server nodes (Optional) Required only for embedded ETCD
OutBound ALL ALL ALL Allow All
特别是: 22 端口必须要对操作机的公网IP 开放
原因: autok3s 自动部署公有云时, 通过公网IP 上传 KeyPair, 如果没有以上安全组,
autok3s
会执行失败. 报错如下: (101.34.46.218
就是公网 IP)level=error msg="[ssh-dialer] init dialer [101.34.46.218:22] error: [tencent] calling getInstanceStatus error. region: ap-shanghai, zone: ap-shanghai-2, instanceName: [ins-ggxozpyl ins-cfi2vio1 ins-78rkem0b], message: not `RUNNING` status"
安装步骤
AutoK3s
在操作机上安装,命令如下:
curl -sS http://rancher-mirror.cnrancher.com/autok3s/install.sh | INSTALL_AUTOK3S_MIRROR=cn sh
过程如下:
Downloading package http://rancher-mirror.rancher.cn/autok3s/v0.4.6/autok3s_linux_amd64 as /tmp/autok3s_linux_amd64
Download complete.
Running with sufficient permissions to attempt to move autok3s to /usr/local/bin
New version of autok3s installed to /usr/local/bin
Version: {"gitVersion":"v0.4.6","gitCommit":"4537e6ee2aea8b204a72f7b6c377edb154f7c058","gitTreeState":"","buildDate":"2021-12-28T04:15:30Z","goVersion":"go1.16.2","compiler":"gc","platform":"linux/amd64"}
Downloading package http://rancher-mirror.rancher.cn/kube-explorer/v0.2.7/kube-explorer-linux-amd64 as /tmp/kube-explorer-linux-amd64
Download complete.
Running with sufficient permissions to attempt to move kube-explorer to /usr/local/bin
New version of kube-explorer installed to /usr/local/bin
Skipping /usr/local/bin/kubectl symlink to autok3s, already exists
您可以通过以下 CLI 命令启动本地 UI。
autok3s serve --bind-address 0.0.0.0 --bind-port 8087
️ Warning:
页面无登录认证,确保最小权限开放以及用完后及时关闭。
输出如下:
INFO[0000] run as daemon, listening on 127.0.0.1:8087
访问 UI:http://<操作机IP>:8087
AutoK3s UI 模板
如果今后要多次安装,可以在 UI 上创建可复用的模板,模板包括如下固定参数:
Credential Options:
- 腾讯云 Secret Id
- 腾讯云 Secret Key
Instance Options
- Basic
- Region:
ap-shanghai
- Zone:
ap-shanghai-2
- Instance Type:
S5.MEDIUM8
- Image:
img-22trbn9x
(ubuntu 20.04) - Disk Category:
CLOUD_SSD
- Disk Size:
50
G
- Region:
- Network
- Internet Max Bandwidth Out:
5
- EIP:
Disable
- ️ 注意:另外 3 个参数:VPC ID、SubnetID、Security Group Ids 每次创建时需要按需填写或留空
- Internet Max Bandwidth Out:
- SSH Public
- SSH User:
ubuntu
- SSH Port:
22
- Keypair Id : 留空(️ 注意:如果 Keypair Id 留空,会自动生成 Keypair)
- SSH User:
- SSH Private
- SSH Agent Auth:
Disable
- SSH Key Path: 留空(️ 注意:如果上面选择了 Keypair Id, 那么对应的SSH Key Path 也要填写)
- SSH Agent Auth:
- Advance
- 打了 3 个 tags,方便后续管理:
app=rancher
env=prod
provider=k3s
- 打了 3 个 tags,方便后续管理:
- Basic
K3s Options
Basic
- K3s Channel:
stable
- K3s Version:
v1.21.7+k3s1
(️ Info: 202201 根据 suse 官网选型的最新稳定版,k3s v1.21.7+k3s1,后面会按需调整版本) - Cluster:
Enable
(启用集群模式,使用 etcd 组成高可用集群) - K3s Install Script:
http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh
- K3s Channel:
Master
Master:
3
Master Extra Args:
--write-kubeconfig-mode "644" --pause-image registry.cn-hangzhou.aliyuncs.com/rancher/pause:3.6 --etcd-s3 --etcd-snapshot-schedule-cron 0 0 * * * --etcd-s3-endpoint cos.ap-shanghai.myqcloud.com --etcd-s3-access-key <your-cos-access-key> --etcd-s3-secret-key <your-cos-secret-key> --etcd-s3-bucket <your-cos-bucket> --etcd-s3-folder /rancher/k3s
Worker
- Worker:
0
- Worker:
Advance: 留空
TLS Sans: 留空 (️ 如果前面会使用 CLB 作为负载均衡,那么建议填上 CLB VIP)
Registry, 见下面
registries.yaml
Additional Options
- UI:
explorer
- UI:
registries.yaml
:
mirrors:
docker.io:
endpoint:
- "https://mirror.ccs.tencentyun.com"
- "https://registry.cn-hangzhou.aliyuncs.com"
- "https://docker.mirrors.ustc.edu.cn"
quay.io:
endpoint:
- "https://mirror.ccs.tencentyun.com"
configs:
'ccr.ccs.tencentyun.com':
auth:
username: <your-account-id>
password: <your-registry-password>
AutoK3s 通过 UI 创建 K3S 集群
访问 UI 界面, 点击 Quick Start, Provider 选择 tencent;
然后在下方填入自定义的信息, 主要是填写 Network 的信息, 如下图:
点击 Create, 等待返回结果即可.
AutoK3s CLI 命令
您也可以通过以下 CLI 在 腾讯云上快速创建一个 3 master, 0 worker 节点的 K3s 高可用集群。
autok3s create --provider tencent --cluster --enable [ "explorer" ] --k3s-channel stable --k3s-install-mirror INSTALL_K3S_MIRROR=cn --k3s-install-script http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh --k3s-version v1.21.7+k3s1 --master 3 --master-extra-args '--write-kubeconfig-mode "644" --pause-image registry.cn-hangzhou.aliyuncs.com/rancher/pause:3.6 --etcd-s3 --etcd-snapshot-schedule-cron 0 0 * * * --etcd-s3-endpoint cos.ap-shanghai.myqcloud.com --etcd-s3-access-key <your-cos-access-key> --etcd-s3-secret-key <your-cos-secret-key> --etcd-s3-bucket <your-cos-bucket> --etcd-s3-folder /rancher/k3s' --name rancher-1 --ssh-port 22 --ssh-user ubuntu --tls-sans <your-clb-ip> --worker 0 --disk-category CLOUD_SSD --disk-size 50 --image img-22trbn9x --instance-type S5.MEDIUM8 --internet-max-bandwidth-out 5 --keypair-id <your-keypair-id> --region ap-shanghai --secret-id <your-tencent-secret-id> --secret-key <your-tencent-secret-key> --tags 'app=rancher' --tags 'env=prod' --tags 'provider=k3s' --zone ap-shanghai-2 --vpc <your-vpc-id> --subnet <your-subnet-id> --registry /etc/autok3s/registries.yaml
安装成功日志显示如下:
time="2022-02-12T14:52:16+08:00" level=info msg="[tencent] executing create logic..."
INFO[0000] [tencent] use existing key pair
time="2022-02-12T14:52:16+08:00" level=info msg="[tencent] 3 masters and 0 workers will be added"
time="2022-02-12T14:52:16+08:00" level=info msg="[tencent] check default security group autok3s in region ap-shanghai"
time="2022-02-12T14:52:16+08:00" level=info msg="[tencent] create default security group autok3s in region ap-shanghai"
time="2022-02-12T14:52:16+08:00" level=info msg="[tencent] check rules of security group autok3s"
time="2022-02-12T14:52:18+08:00" level=info msg="[tencent] 3 number of master instances will be created"
time="2022-02-12T14:52:23+08:00" level=info msg="[tencent] 3 number of master instances successfully created"
time="2022-02-12T14:52:23+08:00" level=info msg="[tencent] waiting for the instances [ins-xxxxx] to be in `RUNNING` status..."
time="2022-02-12T14:52:54+08:00" level=info msg="[tencent] instances [ins-xxxxx] are in `RUNNING` status"
time="2022-02-12T14:52:54+08:00" level=info msg="[tencent] executing init k3s cluster logic..."
time="2022-02-12T14:52:54+08:00" level=info msg="[tencent] creating k3s master-1..."
mirrors:
docker.io:
endpoint:
- https://mirror.ccs.tencentyun.com
- https://registry.cn-hangzhou.aliyuncs.com
- https://docker.mirrors.ustc.edu.cn
quay.io:
endpoint:
- https://mirror.ccs.tencentyun.com
configs:
ccr.ccs.tencentyun.com:
auth:
username:
password:
auth: ""
identity_token: ""
tls: null
auths: {}
time="2022-02-12T14:53:26+08:00" level=info msg="[cluster] k3s master command: curl -sLS http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_TOKEN='xxxxxxx' INSTALL_K3S_EXEC='server --tls-san xxxxx --tls-san xxxxxxxx --tls-san xxxxxxx --node-external-ip xxxxxx --write-kubeconfig-mode \"644\" --pause-image registry.cn-hangzhou.aliyuncs.com/rancher/pause:3.6 --disable-cloud-controller --cluster-cidr 10.42.0.0/16 --cluster-init' INSTALL_K3S_VERSION='v1.21.7+k3s1' sh -"
[INFO] Using v1.21.7+k3s1 as release
[INFO] Downloading hash http://rancher-mirror.cnrancher.com/k3s/v1.21.7-k3s1/sha256sum-amd64.txt
[INFO] Downloading binary http://rancher-mirror.cnrancher.com/k3s/v1.21.7-k3s1/k3s
[INFO] Verifying binary download
[INFO] Installing k3s to /usr/local/bin/k3s
[INFO] Creating /usr/local/bin/kubectl symlink to k3s
[INFO] Creating /usr/local/bin/crictl symlink to k3s
[INFO] Creating /usr/local/bin/ctr symlink to k3s
[INFO] Creating killall script /usr/local/bin/k3s-killall.sh
[INFO] Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[INFO] env: Creating environment file /etc/systemd/system/k3s.service.env
[INFO] systemd: Creating service file /etc/systemd/system/k3s.service
[INFO] systemd: Enabling k3s unit
[INFO] systemd: Starting k3s
time="2022-02-12T14:53:59+08:00" level=info msg="[tencent] successfully created k3s master-1"
time="2022-02-12T14:53:59+08:00" level=info msg="[tencent] creating k3s master-2..."
...
time="2022-02-12T14:54:35+08:00" level=info msg="[tencent] successfully created k3s master-2"
time="2022-02-12T14:54:35+08:00" level=info msg="[tencent] creating k3s master-3..."
...
time="2022-02-12T14:55:06+08:00" level=info msg="[tencent] successfully created k3s master-3"
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: ......
server: https://127.0.0.1:6443
name: default
contexts:
- context:
cluster: default
user: default
name: default
current-context: default
kind: Config
preferences: {}
users:
- name: default
user:
client-certificate-data: ......
client-key-data: ......
time="2022-02-12T14:55:06+08:00" level=info msg="[tencent] deploying additional manifests"
time="2022-02-12T14:55:06+08:00" level=info msg="[tencent] successfully deployed additional manifests"
time="2022-02-12T14:55:06+08:00" level=info msg="[tencent] successfully executed init k3s cluster logic"
---
time="2022-02-12T14:55:07+08:00" level=info msg="[tencent] successfully deployed manifests"
time="2022-02-12T14:55:07+08:00" level=info msg="=========================== Prompt Info ==========================="
time="2022-02-12T14:55:07+08:00" level=info msg="Use 'autok3s kubectl config use-context prod-ha.ap-shanghai.tencent'"
time="2022-02-12T14:55:07+08:00" level=info msg="Use 'autok3s kubectl get pods -A' get POD status`"
到这里, K3S 集群创建完毕.
K3s 配置调整
Important:
安装后, 默认 k8s api 通过 公网 IP 进行通信, 出于安全考虑,建议调整 systemd 配置使其通过内网进行通信.
步骤如下:
修改后两台 master 的 /etc/systemd/system/k3s.service.env
的 K3S_URL
为第一台 master 的内网地址
K3S_URL=https://<master1-internal-ip>:6443
第一台 master, 修改 /etc/systemd/system/k3s.service
, 增加:
'--node-ip' \
'<master1-internal-ip>' \
'--advertise-address' \
'<master1-internal-ip>' \
另外2台, 增加及修改如下:
'--server' \
'https://<master1-internal-ip>:6443' \
...
'--node-ip' \
'<other-master-internal-ip>' \
'--advertise-address' \
'<other-master-internal-ip>' \
重启生效:
systemctl daemon-reload
systemctl restart k3s.service
验证:
查看 kubernetes
的 endpoint, 从公网地址变为内网地址, 如下:
apiVersion: v1
kind: Endpoints
metadata:
name: kubernetes
namespace: default
...
labels:
endpointslice.kubernetes.io/skip-mirror: 'true'
managedFields:
- manager: k3s
operation: Update
...
selfLink: /api/v1/namespaces/default/endpoints/kubernetes
subsets:
- addresses:
- ip: <master2-internal-ip>
- ip: <master1-internal-ip>
- ip: <master3-internal-ip>
ports:
- name: https
port: 6443
protocol: TCP
收尾工作
调整安全组
入站规则:
- TCP:22(SSH) 端口权限收紧
- TCP:6443(K8S API) 端口权限收紧
- UDP:8472(K3s vxlan) 只开放给内网
- TCP:10250(kube api-server) 只开放给内网
最终效果如下: (应该可以进一步收紧)
总结
至此, 完成腾讯云上 K3S 高可用集群的搭建, 并配置备份.
为后面的 Rancher 搭建做好了基础。
以下是安装后的相关输出信息:
K3s
3 个 Master 和 Server hostname、内外网IP
K3S API Server 地址:
https://<以上6个IP地址任一个或CLB的IP>:6443
K3S kubeconfig 配置:位于 k3s 的
/etc/rancher/k3s/k3s.yaml
以及操作机的/root/.autok3s/.kube/config
三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.
K3S系列文章-使用AutoK3s在腾讯云上安装高可用K3S集群的更多相关文章
- 如何在腾讯云上安装Cloud Foundry
Cloud Foundry是VMware推出的业界第一个开源PaaS云平台,它支持多种框架.语言.运行时环境.云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的 ...
- 每天响应数亿次请求,腾讯云如何提供高可用API服务?
每天响应数亿次请求,腾讯云如何提供高可用API服务? https://mp.weixin.qq.com/s/OPwlHcqkaTT_gcwHfr5Shw 李阳 云加社区 2020-09-16 导语 | ...
- 腾讯云部署keepalived高可用
使用背景: 通过调用python SDK在腾讯云手动部署keepalived高可用 部署环境 系统:centos7.3 Master:192.168.0.100 Slave:192.168.0.14 ...
- 在腾讯云上安装mysql遇到的问题
卸载mysql: 1.sudo apt-get autoremove --purge mysql-server-5.5 5.5 是数据库版本, mysql -v 显示版本信息 2.sudo apt-g ...
- 如何安装一个高可用K3s集群?
作者介绍 Janakiram MSV是Janakiram & Associates的首席分析师,也是国际信息技术学院的兼职教师.他也是Google Qualified Developer.亚马 ...
- 在腾讯云上创建一个玩具docker-mysql数据服务
有时候开发需求会自己做一下测试数据,在自己电脑本地安装的服务多了电脑环境会搞的很乱,这时使用云服务器安装个docker服务是一个不错的寻找. 下面步骤是在腾讯云上安装docker-mysql镜像,并导 ...
- 如何用Baas快速在腾讯云上开发小程序-系列4:实现客户侧商品列表、商品详情页程序
版权声明:本文由贺嘉 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/431172001487671163 来源:腾云阁 h ...
- 如何用Baas快速在腾讯云上开发小程序-系列3 :实现腾讯云COS API调用
版权声明:本文由贺嘉 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/640268001487425627 来源:腾云阁 h ...
- 在腾讯云上创建您的SQL Cluster(3)
版权声明:本文由李斯达原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/250 来源:腾云阁 https://www.qclo ...
- 腾讯云上免费部署HTTPS
接上篇<腾讯云下安装 nodejs + 实现 Nginx 反向代理>,想从头一步到位的同学建议从上篇文章开始阅读.本文将继续介绍如何通过 Nginx 免费部署HTTPS. 留意下,这里的“ ...
随机推荐
- Java开发学习(四十六)----MyBatisPlus新增语句之id生成策略控制及其简化配置
在前面有一篇博客:Java开发学习(四十一)----MyBatisPlus标准数据层(增删查改分页)开发,我们在新增的时候留了一个问题,就是新增成功后,主键ID是一个很长串的内容. 我们更想要的是按照 ...
- EPSS 解读:与 CVSS 相比,孰美?
通用漏洞评分系统(CVSS)是当前应用最频繁的评分系统以评估安全漏洞的严重性.但是,由于该系统在评估漏洞和优先级排序方面存在不足而遭受批评.因此,有部分专业人士呼吁使用漏洞利用预测评分系统(EPSS) ...
- 安装es可视化软件Kibana
一 Kibana介绍 Kibana 是一款开源的数据分析和可视化平台,它是 Elastic Stack 成员之一,设计用于和 Elasticsearch 协作. 您.可以使用 Kibana 对 Ela ...
- SQL语句查询关键字:where筛选、group by分组、distinc去重、order by排序、limit分页、操作表的SQL语句布补充
目录 SQL语句查询关键字 前期数据准备 编写SQL语句的小技巧 查询关键字之where筛选 查询关键字之group by分组 查询关键字之having过滤 查询关键字值distinct去重 查询关键 ...
- C# Log4net配置文件 总结
前言 因为项目日志太杂乱而且很大,打开一个就卡死了,何况用户电脑也扛不住日志积累,要做一个日志记录器管理日志.但对里面的配置有一些不熟悉(毕竟都是复制粘贴的),所以记录一下各个项的作用.方便后续复习. ...
- ModuleNotFoundError: No module named 'MySQLdb'
执行命令 python manage.py makemigrations时抛出以下错误 Traceback (most recent call last): File "D:\Program ...
- Jmeter 之 If 逻辑控制器
在Jmeter 中如要在某种场景中才执行特殊请求,此时可用If 逻辑控制器来实现. If 逻辑控制器顾名思义当符合某个条件时则执行,添加路径:测试计划->线程组->逻辑控制器->if ...
- get请求拼接数组转字符串
get请求拼接数组转换成字符串
- Flutter异常监控 - 贰 | 框架Catcher原理分析
前言 在给 Flutter 应用做异常监控的时候,一开始我是拒绝滴,如果不考虑 Flutter Engine 和 native 侧的监控,用我另一篇文章中不得不知道的 Flutter 异常捕获知识点 ...
- [常用工具] C++环境下Qt的安装
文章目录 1 Qt(C++)版本的选择 2 Qt 安装 2.1 Qt 6.3.1的安装 2.2 Qt 5.14.2的安装 3 Qt 其他版本安装 1 Qt(C++)版本的选择 Qt(C++)是一个跨平 ...