UCloud UHost自建K8S集群如何使用基础云产品ULB负载均衡
接下来,我们先熟悉一些基础概念:
Cloud Provider和CSI插件在Kubernetes环境中扮演着至关重要的角色,它们分别负责不同的功能,共同确保Kubernetes集群能够高效、稳定地运行。
Cloud Provider:Cloud Provider是Kubernetes中开放给各个云厂商的通用接口,它允许云厂商通过实现该接口来提供自己的Cloud Provider。这样做的好处是,Kubernetes可以通过这些接口创建、管理、利用各个云服务商提供的资源,这些资源包括但不限于虚拟机/裸金属机器资源、网络资源、负载均衡服务、弹性公网IP、存储服务等。通过这种方式,Kubernetes能够在不同的云平台上运行,并提供容器云服务,从而满足企业对于跨云环境部署的需求。
CSI插件(Container Storage Interface plugin):CSI插件是Kubernetes中的存储插件,它允许容器化应用使用标准的接口来访问存储资源。CSI定义了一个容器化存储插件的接口规范,使得不同的存储解决方案可以以插件的形式集成到Kubernetes中,从而提供统一的存储访问方式。通过CSI插件,Kubernetes能够更好地管理和调度存储资源,确保容器化应用可以高效、可靠地访问存储数据。
综上所述,Cloud Provider和CSI插件在Kubernetes环境中起着桥梁和接口的作用,它们使得Kubernetes能够更好地与底层基础设施和存储系统进行交互,从而提供高效、可扩展的容器化应用运行环境。这些组件的协同工作,是Kubernetes能够成为企业级容器编排解决方案的关键因素之一。
所以,自建K8S调用云资源,本质是完成Cloud Provider和CSI插件的部署与安装,因此,让我们一起进入两个插件的部署流程。
1、注意事项
Pod网段,Service网段不能与公共服务网段重叠。公共服务网段参考UCloud文档中心
容器内需要可以访问 http://api.service.ucloud.cn (用户网公共服务)
2、节点打标签
为每个节点添加以下label,标记地域、可用区和节点资源id信息。
地域和可用区代码可参考UCloud文档中心
以华北二可用区A为例
# 节点添加label
kubectl label node <node-name> node.uk8s.ucloud.cn/instance_type=uhostkubectl label node <node-name> failure-domain.beta.kubernetes.io/region=cn-wlcb
kubectl label node <node-name> failure-domain.beta.kubernetes.io/zone=cn-wlcb-01
kubectl label node <node-name> topology.kubernetes.io/region=cn-wlcb
kubectl label node <node-name> topology.kubernetes.io/zone=cn-wlcb-01
kubectl label node <node-name> node.uk8s.ucloud.cn/resource_id=<uhost-id>
kubectl label node <node-name> UhostID=<uhost-id>
# 查看节点标签
kubectl get node --show-labels |grep <node-name>
查询UHost ID :https://console.ucloud.cn/uhost/uhost
查询node-name:
[root@starctomaster1 ~]# kubectl get nodes
注:每个node节点都需要打标签,如果master节点也会调度pod过去,也需要打标签。
节点持久化配置:每个node节点都需要配置。
[root@starctonode1 ~]# vim /lib/systemd/system/kubelet.service
ExecStart=/usr/bin/kubelet \
--node-labels=node.uk8s.ucloud.cn/instance_type=uhost,failure-domain.beta.kubernetes.io/region=cn-wlcb,failure-domain.beta.kubernetes.io/zone=cn-wlcb-01,topology.kubernetes.io/region=cn-wlcb,topology.kubernetes.io/zone=cn-wlcb-01,node.uk8s.ucloud.cn/resource_id=<uhost-id>,UhostID=<uhost-id>
systemctl daemon-reload
systemctl restart kubelet.service
systemctl status kubelet.service
3、准备uk8sconfig配置
准备uk8sconfig.yaml文件,填入相应值
<project-id>可以从 https://console.ucloud.cn/dashboard 项目ID处获取
<public-key>,<private-key>可以从 https://console.ucloud.cn/uaccount/api_manage 获取
<VPC-Id>可以从https://console.ucloud.cn/vpc/vpc获取
apiVersion: v1
kind: ConfigMap
metadata:
name: uk8sconfig
namespace: kube-system
data:
UCLOUD_API_ENDPOINT: 'http://api.service.ucloud.cn'
UCLOUD_REGION_ID: '<region>'
UCLOUD_PROJECT_ID: '<project-id>'
UCLOUD_API_PUBKEY: '<public-key>'
UCLOUD_API_PRIKEY: '<private-key>'
UCLOUD_CSI_USING_API_KEY: 'true'
UCLOUD_VPC_ID: '<VPC-Id>'
[root@starctomaster1 ~]# vim uk8sconfig.yaml
填写完成后,执行
[root@starctomaster1 ~]# kubectl apply -f uk8sconfig.yaml
3、部署cloudprovider
执行
kubectl apply -f https://docs.ucloud.cn/uk8s/yaml/cloudprovider/24.06.28.yml
cloudprovider使用说明: UCloud文档中心
4、部署csi-udisk (仅支持1.22及以上版本的K8S)
执行
kubectl apply -f https://docs.ucloud.cn/uk8s/yaml/volume/udisk.24.07.01/rbac-udisk-controller.yaml
kubectl apply -f https://docs.ucloud.cn/uk8s/yaml/volume/udisk.24.07.01/rbac-udisk-node.yaml
kubectl apply -f https://docs.ucloud.cn/uk8s/yaml/volume/udisk.24.07.01/csi-udisk-controller.yaml
kubectl apply -f https://docs.ucloud.cn/uk8s/yaml/volume/udisk.24.07.01/csi-udisk-node.yaml
kubectl apply -f https://docs.ucloud.cn/uk8s/yaml/volume/udisk.24.07.01/udisk-storageclass.yaml
部署注意事项:如果节点上的kubelet目录与默认(/var/lib/kubelet)不一致,请先下载 csi-udisk-node.yaml, 修改yaml 中 hostPath volumes 里的路径,以及node-registrar的启动参数中的/var/lib/kubelet部分为实际kubelet目录。
udisk csi使用文档:UCloud文档中心
使用注意: UDisk仅支持单点挂载(RWO)
5、自建K8S使用云ULB产品案例
ULB使用教程:https://docs.ucloud.cn/uk8s/service/internalservice
[root@starctomaster1 ~]# vim ulb.yaml
apiVersion: v1
kind: Service
metadata:
name: ucloud-nginx-out-tcp-new
labels:
app: ucloud-nginx-out-tcp-new
annotations:
# ULB类型,默认为outer,支持outer、inner
"service.beta.kubernetes.io/ucloud-load-balancer-type": "inner"
# 用于声明ULB协议类型,并非应用协议,tcp和udp均代表ULB4,https和http均代表ULB7;
"service.beta.kubernetes.io/ucloud-load-balancer-vserver-protocol": "tcp"
# 对于ULB4而言,不论容器端口类型是tcp还是udp,均建议显式声明为port。
"service.beta.kubernetes.io/ucloud-load-balancer-vserver-monitor-type": "port"
# 控制创建ULB所在子网,填写子网ID
"service.beta.kubernetes.io/ucloud-load-balancer-subnet-id": "subnet-xxxx"
spec:
type: LoadBalancer
ports:
- protocol: TCP
port: 80
targetPort: 80
selector:
app: ucloud-nginx-out-tcp-new
---
apiVersion: v1
kind: Pod
metadata:
name: test-nginx-out-tcp
labels:
app: ucloud-nginx-out-tcp-new
spec:
containers:
- name: nginx
image: uhub.service.ucloud.cn/ucloud/nginx:1.9.2
ports:
- containerPort: 80
注:上述要填对子网地址subnet-xxxx,子网ID查询地址:https://console.ucloud.cn/vpc/subnet
[root@starctomaster1 ~]# kubectl apply -f ulb.yaml
[root@starctomaster1 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
test-nginx-out-tcp 1/1 Running 0 36s
[root@starctomaster1 ~]# kubectl get svc
注1:可以看到,云ULB已经创建成功。
注2:可以看到,云ULB的IP地址映射到了容器SVC的地址。
作者:UStarGao
链接:https://www.starcto.com/k8s/328.html
来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
UCloud云平台推荐
随便看看
- 2021-03-25UCloud IPSecVPN网关搭建VPN隧道
- 2021-03-05MySQL查询语句执行过程
- 2022-03-31MongoDB分片集群安装部署教程
- 2021-06-12MySQL主从同步异常之跳过错误
- 2021-08-05Redis持久化机制之AOF日志与RDB快照