k8s-使用Service访问集群中的应用程序对象

k8s-使用Service访问集群中的应用程序对象

目标

  • 运行2个实例的hello-world程序
  • 创建公开节点端口的Service对象
  • 使用Service对象访问应用程序

  • 为运行2个pods的应用程序创建一个Service

  • 在集群中运行Hello World程序

rollenholt@jarvis-2: ~ $  kubectl run hello-world --replicas=2 --labels="run=load-balancer-example" --image=gcr.io/google-samples/node-hello:1.0  --port=8080
deployment "hello-world" created

这个命令创建了一个Deployment对象和一个关联的ReplicaSet对象。这个ReplicaSet有2个Pods,每一个pods都运行一个hello-world程序

  • 显示Deployment的信息:
    rollenholt@jarvis-2: ~ $  kubectl get deployments hello-world
    NAME          DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    hello-world   2         2         2            0           25s
    rollenholt@jarvis-2: ~ $ kubectl describe deployments hello-world
    Name:			hello-world
    Namespace:		default
    CreationTimestamp:	Tue, 21 Mar 2017 09:35:06 +0800
    Labels:			run=load-balancer-example
    Selector:		run=load-balancer-example
    Replicas:		2 updated | 2 total | 0 available | 2 unavailable
    StrategyType:		RollingUpdate
    MinReadySeconds:	0
    RollingUpdateStrategy:	1 max unavailable, 1 max surge
    Conditions:
    Type		Status	Reason
    ----		------	------
    Available 	False	MinimumReplicasUnavailable
    OldReplicaSets:	<none>
    NewReplicaSet:	hello-world-2895499144 (2/2 replicas created)
    Events:
    FirstSeen	LastSeen	Count	From				SubObjectPath	Type		Reason			Message
    ---------	--------	-----	----				-------------	--------	------			-------
    37s		37s		1	{deployment-controller }			Normal		ScalingReplicaSet	Scaled up replica set hello-world-2895499144 to 2

- 显示`ReplicaSet`对象的信息:

    rollenholt@jarvis-2: ~ $  kubectl get replicasets
    NAME                         DESIRED   CURRENT   READY     AGE
    hello-world-2895499144       2         2         2         5m
    rollenholt@jarvis-2: ~ $  kubectl describe replicasets
    Name:		hello-world-2895499144
    Namespace:	default
    Image(s):	gcr.io/google-samples/node-hello:1.0
    Selector:	pod-template-hash=2895499144,run=load-balancer-example
    Labels:		pod-template-hash=2895499144
            run=load-balancer-example
    Replicas:	2 current / 2 desired
    Pods Status:	2 Running / 0 Waiting / 0 Succeeded / 0 Failed
    No volumes.
    Events:
    FirstSeen	LastSeen	Count	From				SubObjectPath	Type		Reason			Message
    ---------	--------	-----	----				-------------	--------	------			-------
    5m		5m		1	{replicaset-controller }			Normal		SuccessfulCreate	Created pod: hello-world-2895499144-hr545
    5m		5m		1	{replicaset-controller }			Normal		SuccessfulCreate	Created pod: hello-world-2895499144-9lj5k
  • 创建公开deployment的Service对象:
    rollenholt@jarvis-2: ~ $  kubectl expose deployment hello-world --type=NodePort --name=example-service
    service "example-service" exposed

显示Service的信息:

    rollenholt@jarvis-2: ~ $  kubectl describe services example-service
    Name:			example-service
    Namespace:		default
    Labels:			run=load-balancer-example
    Selector:		run=load-balancer-example
    Type:			NodePort
    IP:			10.0.0.100
    Port:			<unset>	8080/TCP
    NodePort:		<unset>	31989/TCP
    Endpoints:		172.17.0.5:8080,172.17.0.6:8080
    Session Affinity:	None
    No events.

记下服务的NodePort值。 例如,在前面的输出中,NodePort值为31989。

  • 列出运行hello-world程序的pods:
    rollenholt@jarvis-2: ~ $  kubectl get pods --selector="run=load-balancer-example" --output=wide
    NAME                           READY     STATUS    RESTARTS   AGE       IP           NODE
    hello-world-2895499144-9lj5k   1/1       Running   0          9m        172.17.0.6   minikube
    hello-world-2895499144-hr545   1/1       Running   0          9m        172.17.0.5   minikube
  • 获取运行Hello World pod的一个节点的“public IP address”。 如何获取此地址取决于您如何设置集群。 例如,如果您使用Minikube,您可以通过命令kubectl cluster-info'查看节点地址。 如果您使用Google Compute Engine,可以使用gcloud compute instances list`命令查看节点的公开地址。

因为我使用的是Minikube,所以执行下面的命令:

rollenholt@jarvis-2: ~ $ kubectl cluster-info
Kubernetes master is running at https://192.168.99.100:8443
KubeDNS is running at https://192.168.99.100:8443/api/v1/proxy/namespaces/kube-system/services/kube-dns
kubernetes-dashboard is running at https://192.168.99.100:8443/api/v1/proxy/namespaces/kube-system/services/kubernetes-dashboard

可以看出集群的公共IP为:192.168.99.100

  • 在所选节点上,创建允许节点端口上的TCP流量的防火墙规则。 例如,如果您的服务的NodePort值为31989,请创建允许端口31989上的TCP流量的防火墙规则。

  • 使用节点地址和节点端口访问Hello World应用程序:

    curl http://<public-node-ip>:<node-port> # 也就是curl http://192.168.99.100:31989
    Hello Kubernetes!

其中<public-node-ip>是您的节点的公共IP地址,<node-port>是您的服务的NodePort值。
对成功请求的响应是hello消息:Hello Kubernetes!

Cleaning up

  • 使用下面的命令删除Service:
    kubectl delete services example-service

  • 要删除运行Hello World应用程序的Deployment,ReplicaSet和Pod,请输入此命令:

kubectl delete deployment hello-world

参考资料

本文版权归作者所有,禁止一切形式的转载,复制等操作
赞赏

微信赞赏支付宝赞赏

发表评论

电子邮件地址不会被公开。 必填项已用*标注