登陆GKE集群并通过负载均衡器将NGINX的DaemonSet公开(个人备忘录)
你好。
我是Class Act基础设施业务部的大塚。
我最近对Kubernetes和Docker非常感兴趣,所以我将在这里分享我从中获得的知识和见解。为了玩弄这些技术,我在公司内部准备了一个免费的、需要规格的环境,我个人非常喜欢。但是,如果公司的网络发生故障,我就无法连接到这些环境,无法继续玩耍。这真是令人困扰。
因此,我想要在公有云上提供一个实践环境,所以我选择了Google云平台(GCP)进行尝试,并记录了我的操作体验。
用语可以用中文表达,只需选择一个选项:
谷歌云平台
Google云平台的简称。类似于AWS和Azure等公共云服务。
AWS允许在一年内免费使用限定的服务,而GCP允许免费使用$300的各项服务。
GCP提供了名为GKE的Kubernetes服务,这也可以免费使用$300。
AWS有EKS,但这超出了免费使用范围,需要支付费用。
谷歌云引擎 (Google Kubernetes Engine)
谷歌容器引擎 (Google Kubernetes Engine) 的简称。
一个神器,只需点击按钮便可为您准备好 Kubernetes 集群。
通过GCP登录,在GKE上构建集群。
我要登录页面。
在浏览器上连接并公开DS于LB上。
GKE的k8s集群似乎是由两台服务器组成的。
ohtsuka_honban@cloudshell:~/yaml (western-antonym-386513)$ kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
gk3-my-k8s-cluster-default-pool-65cbb045-3ww4 Ready <none> 11m v1.25.7-gke.1000 10.128.0.3 34.135.19.169 Container-Optimized OS from Google 5.15.65+ containerd://1.6.18
gk3-my-k8s-cluster-default-pool-ff5ff3b9-67pp Ready <none> 11m v1.25.7-gke.1000 10.128.0.4 35.238.40.41 Container-Optimized OS from Google 5.15.65+ containerd://1.6.18
DS的yaml文件如下所示。
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nginx-ds
spec:
selector:
matchLabels:
name: nginx
template:
metadata:
labels:
name: nginx
spec:
containers:
- name: nginx-container
image: nginx:latest
LB的yaml如下所示。
apiVersion: v1
kind: Service
metadata:
name: nginx-lb
spec:
type: LoadBalancer
selector:
name: nginx
ports:
- protocol: TCP
port: 60000
targetPort: 80
我会部署这些。
负载均衡器的EXTERNAL-IP当前显示为pending,但只要经过一段时间,它将被分配并附加上去,所以我们需要等待。
ohtsuka_honban@cloudshell:~/yaml (western-antonym-386513)$ kubectl apply -f nginx-ds.yaml
Warning: Autopilot set default resource requests for DaemonSet default/nginx-ds, as resource requests were not specified. See http://g.co/gke/autopilot-defaults
daemonset.apps/nginx-ds created
ohtsuka_honban@cloudshell:~/yaml (western-antonym-386513)$ kubectl apply -f nginx-lb.yaml
service/nginx-lb created
ohtsuka_honban@cloudshell:~/yaml (western-antonym-386513)$ kubectl get all -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/nginx-ds-nl6c5 1/1 Running 0 31s 10.109.128.72 gk3-my-k8s-cluster-default-pool-ff5ff3b9-67pp <none> <none>
pod/nginx-ds-zggph 1/1 Running 0 31s 10.109.128.18 gk3-my-k8s-cluster-default-pool-65cbb045-3ww4 <none> <none>
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/kubernetes ClusterIP 10.110.0.1 <none> 443/TCP 26m <none>
service/nginx-lb LoadBalancer 10.110.1.206 <pending> 60000:32653/TCP 4s name=nginx
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE CONTAINERS IMAGES SELECTOR
daemonset.apps/nginx-ds 2 2 2 2 2 <none> 32s nginx-container nginx:latest name=nginx
等待数分钟后,将附加外部IP。
本次分配的IP是35.188.98.215。
ohtsuka_honban@cloudshell:~/yaml (western-antonym-386513)$ kubectl get svc -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kubernetes ClusterIP 10.110.0.1 <none> 443/TCP 28m <none>
nginx-lb LoadBalancer 10.110.1.206 35.188.98.215 60000:32653/TCP 80s name=nginx
在Web浏览器中搜索http://35.188.98.215:60000/。
我们可以看到可以连接到nginx的DeamonSet。
我们成功地通过负载均衡将DS在GKE上公开。