五、
通过可以创建一组pod来提供具有高可用性的服务 。虽然每个pod都会分配一个ip,然而都存在以下问题:
pod ip会随着pod的重建而变化pod ip仅仅是集群内可见的虚拟ip,外部都无法访问
这样对于访问这个服务带来了难度,因此,设计来解决这个问题 。
可以看作是一组同类pod对外的访问接口,借助,应用可以方便的实现服务发现和负载均衡(类似与反向代理,对后端的pod进行代理) 。
控制器也是基于标签选择器机制来关联和管理对应的pod(与控制器一样都是通过 Label 标签和 选择器与pod进行关联的),在整个生命周期中IP不会改变
操作一:创建集群内部可以访问的(类型)
# 创建基于deployment管理的pod[root@k8s-master ~]# vim deploy-nginx.yamlapiVersion: apps/v1kind: Deploymentmetadata:name: nginx-deploynamespace: testspec:replicas: 3selector:matchLabels: app: my-nginx-podtemplate:metadata:labels: app: my-nginx-podspec:containers:- name: nginx-containimage: nginx:1.17.1imagePullPolicy: IfNotPresentports:- name: nginx-portcontainerPort: 80protocol: TCP[root@k8s-master ~]# kubectl apply -f deploy-nginx.yamldeployment.apps/nginx-deploy created# 查看运行状态[root@k8s-master ~]# kubectl get deploy,pod -n test -o wide --show-labelsNAMEREADYUP-TO-DATEAVAILABLEAGECONTAINERSIMAGESSELECTORLABELSdeployment.apps/nginx-deploy3/3332m53snginx-containnginx:1.17.1app=my-nginx-podNAMEREADYSTATUSRESTARTSAGEIPNODENOMINATED NODEREADINESS GATESLABELSpod/nginx-deploy-5dbf5bcdc4-ks5jl1/1Running02m53s10.244.2.12k8s-node02app=my-nginx-pod,pod-template-hash=5dbf5bcdc4pod/nginx-deploy-5dbf5bcdc4-q5dzk1/1Running02m53s10.244.1.16k8s-node01app=my-nginx-pod,pod-template-hash=5dbf5bcdc4pod/nginx-deploy-5dbf5bcdc4-sw8tj1/1Running02m53s10.244.2.13k8s-node02app=my-nginx-pod,pod-template-hash=5dbf5bcdc4#暴露service[root@k8s-master ~]# kubectl expose deploy nginx-deploy --name=svc-nginx1 --type=ClusterIP --port=80 --target-port=80 -n testservice/svc-nginx1 exposed# expose deploy nginx-deploy将名为nginx-deploy的deployment管理器所管理的pod进行暴露# --name指定Service名称# --typeservice类型,ClusterIp这个类型是只有在集群内部才可以访问的(不指定--type 默认为ClusterIp类型);NodePort类型可以使得集群外部可以访问到service# --portservice 上的端口# --target-port对应到pod中的容器上的端口# 查看service[root@k8s-master ~]# kubectl get svc -n test -o wideNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGESELECTORsvc-nginx1ClusterIP10.105.172.8880/TCP35sapp=my-nginx-pod# 这里产生的ClusterIP,就是该service的IP 。在service的生命周期中,这个ip地址是不会变动的# 可以通过service这个IP访问到其后对应的三个容器中的任意一个(具体访问到哪个容器有一定的算法调度)[root@k8s-master ~]# kubectl describe svc svc-nginx1 -n test Name:svc-nginx1Namespace:testLabels:Annotations:Selector:app=my-nginx-podType:ClusterIPIP:10.105.172.88Port:
配置方式
[root@k8s-node01 ~]# kubectl get deploy -n test --show-labelsNAMEREADYUP-TO-DATEAVAILABLEAGELABELSnginx-deploy3/33377m[root@k8s-node01 ~]# kubectl get pod -n test --show-labelsNAMEREADYSTATUSRESTARTSAGELABELSnginx-deploy-5dbf5bcdc4-b59441/1Running077mapp=my-nginx-pod,pod-template-hash=5dbf5bcdc4nginx-deploy-5dbf5bcdc4-hxpbf1/1Running077mapp=my-nginx-pod,pod-template-hash=5dbf5bcdc4nginx-deploy-5dbf5bcdc4-ll46v1/1Running077mapp=my-nginx-pod,pod-template-hash=5dbf5bcdc4# 使用上面创建好的pod# 编写配置文件 (ClusterIP类型)[root@k8s-master ~]# vim svc-nginx3.yamlapiVersion: v1kind: Servicemetadata:name: svc-nginx3namespace: testspec:selector:app: my-nginx-podtype: ClusterIPclusterIP: 10.96.96.96#该service的IP(不写的话会自动分配,写的话要符合之前在使用 kubeadm init 命令创建集群时指定的service网段,即 --service-cidr= 参数所指定的网段)ports:- port: 80# service端口protocol: TCPtargetPort: 80# 容器端口# 创建[root@k8s-master ~]# kubectl create -f svc-nginx.yaml# 查看该svc[root@k8s-master ~]# kubectl get svc -n test --show-labels -o wideNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGESELECTORLABELSsvc-nginx3ClusterIP10.96.96.9680/TCP3m38sapp=my-nginx-pod# 访问[root@k8s-master ~]# curl 10.96.96.96
- 学习和计算时特别常用的三角公式
- 【电子元件】常用电子元器件的识别之二极管
- 10个ai算法常用库java版
- ROS2和ROS1常用命令速查与对比
- k8s里面Service中ClusterIP和NodePort的使用
- 12大常用自动化测试工具,请记得转发收藏!
- 三唑醇常用于防治什么
- neo4j 常用功能和语句整理
- Object js对象常用方法(Api)
- 六 Linux:系统运维常用命令