Uk8s新用户接入指南
Uk8s新用户接入指南
基础使用
- Uk8s集群创建:https://console.ucloud.cn/uk8s/manage
- Uk8s文档参考: https://docs.ucloud.cn/uk8s/README
Uk8s 产品化功能支持程度概述
以下表格主要体现了,k8s原生能力之外,结合Ucloud云平台产品化能力的支持程度
功能 | ucloud | 备注 |
---|---|---|
集群网络 | vpc cni | underlay的网络模型 |
负载均衡 | 支持 | |
Ingress | 无 | 需要部署开源软件 |
块存储卷(storage-class) | 支持 | |
NFS 动态存储卷(storage-class) | 支持 | |
对象存储(storage-class) | 支持 | |
弹性伸缩 | 支持 | CA HPA VPA |
GPU节点 | 支持 | |
高性能计算节点 | 支持 | |
混合云/托管区节点 | 支持 | 需要打通托管区网络,只能添加托管区节点作为node节点 |
制品库 | uhub | |
多集群管理 | 仅限创建,删除 | |
租户权限 | 无 | |
应用管理 | 无 | |
发布管理 | 无 | |
微服务 | 无 | |
日志 | 仅限于单集群 | |
监控 | 仅限于单集群 | |
链路追踪 | 无 |
Uk8s 历史案例记录
-
新建 Uk8s 集群注意事项
- Master 节点配置,建议选择不同可用区,默认是单一可用区,不满足高可以用要求
- Master 节点,Node节点,建议选择性能更好的 快杰O机型云主机,默认是 N型 普通云主机
- 外网APIServer 建议关闭,默认打开
- kube-proxy 建议选择ipvs模式,默认是iptable模式
- 管理设置-> 更过设置-> 集群本地域名: 建议更改为和集群用途相关的域名,默认是cluster.local,在多集群日志采集,监控采集,使用默认域名会导致采集数据分类困难
-
配置动态存储卷
- 新建 Uk8s 默认提供的块存储的 storage-class,容器应用常用是共享文件存储类型的storage-class,基于UFS创建 nfs 动态存储卷配置过程参考如下:
- 首先在ucloud 控制台创建UFS存储,选择 k8s集群所在的vpc 子网 创建UFS挂载点,StorageClass部署参考 https://github.com/panhaitao/k8s-app/tree/main/deploy-for-k8s/StorageClass-UFS
git clone https://github.com/panhaitao/k8s-app.git
cd k8s-app/deploy-for-k8s/StorageClass-UFS/
- 修改 deployment.yaml 配置中 挂载点ufs_server_ip 和storage 大小,顺序执行如下命令:
kubectl apply -f deployment.yaml
kubectl apply -f rbac.yaml
kubectl apply -f class.yaml
- 检查确认执行命令:kubectl get pod 返回如下结果为正常
NAME READY STATUS RESTARTS AGE nfs-client-provisioner-58886b744d-dg7gh 1/1 Running 0 6m39s 执行命令:kubectl get sc 返回结果包含如部分为正常 ufs-nfsv4-storage (default) ucloud/ufsprovisioner Delete Immediate false 12m
-
安装 Helm 包管理器
Helm 类似 Linux 操作系统中的包管理工具,如 CentOS 发行版中的的 yum,Debian发行版中的的 apt。Helm 让 Kubernetes 的用户可以像安装软件包一样,轻松查找、部署、升级或卸载各种容器软件包,推荐使用helm v3版本来管理容器应用,登录k8s集群任意一台master,执行如下命令
wget https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz #或 wget https://mirrors.huaweicloud.com/helm/v3.5.2/helm-v3.5.2-linux-amd64.tar.gz
tar -xf helm-v3.5.2-linux-amd64.tar.gz
mv linux-amd64/helm /usr/bin/
chmod 755 /usr/bin/helm
-
对接日志系统
Uk8s集群节点的日志目录层级如下: /var/log/containers -> /var/log/pods -> /data/docker/container,在对接第三方日志系统需要将 /data/docker/container 目录也挂载到volumes 中,例如以 filebeat agent的DS配置为例,需要补充如下参考部分,其他类同:
volumeMounts:
- mountPath: /data/docker/containers
name: data-containers
volumes:
- hostPath:
path: /data/docker/containers
type: ""
name: data-containers
-
跨集群服务调用
跨集群服务调用可以采用ingress结合LB实现,常见场景可参考如下文档:
https://www.jianshu.com/p/2919f64299b2 配置ingress网关服务小节,其中包括
- 部署公网 LB 版的 nginx ingress
- 部署内网 LB 版的 nginx ingress
https://www.jianshu.com/p/49e3abddd05a ingress-nginx常见参考配置场景指南,其中包括,
-
配置 ingress 支持 websocket 协议
-
配置 Ingress 支持 tcp/udp 转发
-
配置 Ingress 绑定ULB 实现 http 跳转https功能
-
关于pod热更新
按照k8s编排调度的设计理念,POD并不等同于虚拟机,POD是在Service后是动态存在的最小调度单元,这里可能需要对业务应用部署架构作适当的调整,来匹配k8s编排调度方式
-
关于单容器多进程
虚拟机的方式部署比较常见一个虚拟机内运行多个进程,在容器内,原则上一个容器实例只运行一个进程
-
如果有特殊场景需要一个容器实例内运行多个进程,可以使用在编写Dockerfile 使用 supervisor 类进程管理工具来实现
-
推荐使用容器组方式,把多个进程分别封装在不同容器实例内,使用link机制关联起来,POD本身的设计就是就是容器组方式,一个pod单元由一个根容器和其它一个或多个containers组成
-
关于如何定义pod启动顺序
- 可以通过 initContainers 方式来实现控制POD启动顺序,例如如下配置片段,展示了一个具有 2 个 Init 容器的简单 Pod。 第一个等待 myservice 启动,第二个等待 mydb 启动。 一旦这两个 Service 都启动完成,Pod 将开始启动
containers:
- name: myapp-container
image: busybox
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
initContainers:
- name: init-myservice
image: busybox
command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
- name: init-mydb
image: busybox
command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']