栏目头部广告

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

image.png

注:每个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

image.png

image.png

注1:可以看到,云ULB已经创建成功。

注2:可以看到,云ULB的IP地址映射到了容器SVC的地址。

作者:UStarGao
链接:https://www.starcto.com/k8s/328.html
来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处

UCloud云平台推荐


UCloud新用户专属注册连接

UCloud CDN超值特惠专场

UCloud全球云主机(UHost/VPS)大促页面

UCloud快杰云主机大促页面

文章页广告

随便看看

栏目底部广告
`