十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
下文给大家带来如何使用httpd镜像创建一个Deployment资源对象及其它关联,希望能够给大家在实际运用中带来一定的帮助,负载均衡涉及的东西比较多,理论也不多,网上有很多书籍,今天我们就用创新互联在行业内累计的经验来做一个解答。
你所需要的网站建设服务,我们均能行业靠前的水平为你提供.标准是产品质量的保证,主要从事成都网站建设、成都网站设计、企业网站建设、成都做手机网站、网页设计、成都品牌网站建设、网页制作、做网站、建网站。成都创新互联拥有实力坚强的技术研发团队及素养的视觉设计专才。[root@master ~]# vim lvjianzhao.yaml #编写yaml文件
kind: Deployment #指定要创建的资源对象类型
apiVersion: extensions/v1beta1 #指定deployment所对应的API版本
metadata:
name: lvjianzhao-deploy #定义deployment的名称
spec:
replicas: 4 #定义需要创建pod副本的数量
template:
metadata:
labels: #指定pod的标签
user: lvjianzhao
spec:
containers:
- name: httpd #指定容器的名称
image: httpd #指定基于哪个镜像运行容器
[root@master ~]# kubectl apply -f lvjianzhao.yaml #执行编写的文件
[root@master ~]# kubectl explain deployment
#注:如果不知道某个资源对象所对应的API版本,可以通过此命令查看
KIND: Deployment
VERSION: extensions/v1beta1 #这就是Deployment资源所对应的API版本
........................#省略部分内容
[root@master ~]# kubectl get deployment lvjianzhao-deploy
#确定所执行的yaml文件生成了我们所需数量的pod
查看其pod标签,是否是我们定义的label:
[root@master ~]# kubectl describe deployment lvjianzhao-deploy #查看这个资源对象的详细信息
Name: lvjianzhao-deploy
Namespace: default
CreationTimestamp: Thu, 07 Nov 2019 17:50:44 +0800
Labels: "user=lvjianzhao" #这里就是该资源对象的标签
[root@master ~]# vim httpd-service.yaml #编写service的yaml文件
kind: Service
apiVersion: v1
metadata:
name: httpd-service
spec:
type: NodePort #这里需要指定类型为“NodePort”,否则默认是cluster IP
selector:
user: lvjianzhao #与deployment资源对象的这个标签进行关联
ports:
- protocol: TCP
port: 79 #这里指定要映射到的Cluster IP的端口
targetPort: 80 #这里指定的是要映射pod中的端口
nodePort: 32123 #这里指定的是映射到宿主机的端口
[root@master ~]# kubectl apply -f httpd-service.yaml #执行该yaml文件
[root@master ~]# kubectl get svc httpd-service #查看创建的svc(service)
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
httpd-service NodePort 10.97.13.198 79:32123/TCP 2m1s
#可以看到将指定的群集端口映射到了本地的32123
现在就可以使用client访问k8s群集中任意一个节点的32123端口,即可看到pod所提供的服务,如下:
[root@master ~]# kubectl describe svc httpd-service #查看该service的详细信息
返回的信息如下(只能显示少量IP,剩下的只是被省略了,而不是未指定):
既然上面说到了,endpoint指定的都是后端pod的IP地址,那么就来查看验证一下,是否正确,如下:
[root@master ~]# kubectl get pod -o wide | awk '{print $6}' #输出后端pod的IP地址
IP
10.244.1.18
10.244.2.21
10.244.1.17
10.244.2.20
#可以确认查看的IP能对应上上面service的endpoint指定的IP
查看svc映射endpoint的详细情况,并详细说明负载均衡的底层原理。
其实,背后的原理并没有那么高大上,kube-proxy通过iptables的转发机制来实现负载均衡的效果的,先定义目标IP是service提供的群集IP,然后使用“-j”选项转发到其他iptables规则,如下:
[root@master ~]# kubectl get svc httpd-service | awk '{print $3}'
#我们需要先查看到service的群集IP
CLUSTER-IP
10.97.13.198
[root@master ~]# iptables-save > a.txt #将iptables规则输出到文件中,方便我们查找
[root@master ~]# vim a.txt #打开iptables规则
搜索我们的群集IP,可以看到,当目标地址是群集IP地址时,就会转发到另一个规则“KUBE-SVC-X2P42VLQEZCHLPKZ”,如下:
那么,现在继续搜索它转发到的规则上,如下:
上面的图中,就是与他实现负载均衡相关的策略的,我们一共四个pod,所以上图中的第一个规则使用了random的算法,只有0.25(1/4)的几率采用这个规则,当到达第二条规则后,则有0.33的几率,因为去除前一个pod,还剩下三个pod,10/3=0.33,这就是这个几率的由来,依次类推,当到达最后一个规则后,那么就不用指定几率了,肯定是它来处理这条请求。
[root@master ~]# kubectl label nodes node01 disktype=ssd #给节点node01打标签“disktype=ssd”(自定义的标签) #相应的yaml文件如下: kind: Deployment apiVersion: extensions/v1beta1 metadata: name: httpd spec: revisionHistoryLimit: 10 replicas: 3 template: metadata: labels: app: httpd-server spec: containers: - name: httpd image: 192.168.1.1:5000/httpd:v1 ports: - containerPort: 80 nodeSelector: //指定标签选择器
disktype: ssd
看了以上关于如何使用httpd镜像创建一个Deployment资源对象及其它关联,如果大家还有什么地方需要了解的可以在创新互联行业资讯里查找自己感兴趣的或者找我们的专业技术工程师解答的,创新互联技术工程师在行业内拥有十几年的经验了。
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。