service的三种端口portservice暴露在cluster ip上的端口,:port 是提供给集群内部客户访问service的入口 。
nodePortnodePort是k8s提供给集群外部客户访问service入口的一种方式,:nodePort 是提供给集群外部客户访问service的入口 。
targetPorttargetPort是pod上的端口,从port和nodePort上到来的数据最终经过kube-proxy流入到后端pod的targetPort上进入容器 。
port、nodePort总结总的来说,port和nodePort都是service的端口,前者暴露给集群内客户访问服务,后者暴露给集群外客户访问服务 。从这两个端口到来的数据都需要经过反向代理kube-proxy流入后端pod的targetPod,从而到达pod上的容器内 。
查看service转发情况ipvadmservice NodePort 39719 和endpoint[root@mcwk8s03 ~]# kubectl get svc mcw-nginx-serviceNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGEmcw-nginx-serviceNodePort10.2.0.252<none>80:39719/TCP9m21s[root@mcwk8s03 ~]# kubectlget pod -o wideNAMEREADYSTATUSRESTARTSAGEIPNODENOMINATED NODEREADINESS GATESmcw-nginx-deployment-86466dbd78-fkrs71/1Running064m172.17.13.2mcwk8s05<none><none>mcw-nginx-deployment-86466dbd78-rnvsc1/1Running064m172.17.13.4mcwk8s05<none><none>mcw-nginx-deployment-86466dbd78-znjbm1/1Running064m172.17.21.3mcwk8s06<none><none>[root@mcwk8s03 ~]#[root@mcwk8s03 ~]# kubectl get endpoints mcw-nginx-serviceNAMEENDPOINTSAGEmcw-nginx-service172.17.13.2:80,172.17.13.4:80,172.17.21.3:8012m[root@mcwk8s03 ~]# node上查看nodeport[root@mcwk8s05 ~]# netstat -lntup|grep 39719tcp600 :::39719:::*LISTEN130848/kube-proxy[root@mcwk8s05 ~]# node上使用ipvadm查看service的转发情况(负载均衡情况)[root@mcwk8s05 ~]# yum install ipvsadm -y[root@mcwk8s05 ~]# ipvsadm -L -nIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:PortForward Weight ActiveConn InActConnTCP10.0.0.35:39719 rr#node ip : node port 就转发到下面三个pod的80服务上-> 172.17.13.2:80Masq100-> 172.17.13.4:80Masq100-> 172.17.21.3:80Masq100......TCP172.17.13.0:39719 rr-> 172.17.13.2:80Masq100-> 172.17.13.4:80Masq100-> 172.17.21.3:80Masq100......TCP172.17.13.1:39719 rr-> 172.17.13.2:80Masq100-> 172.17.13.4:80Masq100-> 172.17.21.3:80Masq100.......TCP 10.2.0.252:80 rr #service的cluster ip : port 提供集群内部访问service用的,这个端口和宿主机端口没关系 , 不是宿主机端口-> 172.17.13.2:80Masq100-> 172.17.13.4:80Masq100-> 172.17.21.3:80Masq100
[root@mcwk8s05 ~]# 浏览器上访问时

文章插图
谷歌浏览器成功访问 , 被调度到其中一个pod上了

文章插图
kubectl set 更新应用使用k8s,使用的是镜像 。我们需要更新应用,就是换新的镜像 。kubectl set可以替换镜像 。它还有一些子命令envUpdate environment variables on a pod templateimageUpdate image of a pod templateresources可以对资源,比如cpu等进行限制,Update resource requests/limits on objects with pod templatesselector修改标签,Set the selector on a resourceserviceaccount Update ServiceAccount of a resourcesubject角色绑定。Update User, Group or ServiceAccount in a RoleBinding/ClusterRoleBinding
kubectl -h
kubectl set -h
kubectl set image -h
我们可以层层去看帮助信息,找到我们需要的命令 。
比如我们就用下面的改改,

文章插图
当我们请求网站的时候 , 响应头里面带了服务的版本信息

文章插图
我们将nginx改为1.14版本的镜像
kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1
根据帮助信息里的修改,deployment名字要对上 。后面容器名字=新的镜像要对上容器名,把pod后面的随机字符串去掉就行 。貌似也就是deployment名称呀 。-w会实时显示pod的情况

文章插图

文章插图
不知道为啥 , master上执行命令,拉取镜像很慢 , 拉取不下来,但是我直接取node上docker pull很快的 。可能是node上直接用的配置文件里面的三个镜像地址,而kubectl去拉去镜像,用的是k8s集群里哪里设置的一个镜像地址吧?我记得之前设置了一个阿里云镜像地址的 。所以我直接就在node上执行命令拉取镜像了 。让pod不用显示拉取镜像这一个步骤了 。
-w可能理解有误,我这直接去node上执行命令pull镜像之后,貌似已经运行了,但是-w这里还是那里卡着不动 。
推荐阅读
- 奥比岛2022盛夏之旅活动参与方法
- 流放之路S20卡兰德之湖赛季上线时间说明
- 真正“搞”懂HTTP协议03之时间穿梭
- 网络协议之:redis protocol 详解
- 信号量 C# 多线程访问之 SemaphoreSlim【C# 进阶】
- JavaScript之数组高阶API—reduce
- 奥比岛暗夜袭击第一轮金块失踪之谜通关攻略
- 之八 2流高手速成记:基于Sentinel实现微服务体系下的限流与熔断
- 明日之后幽灵船在哪
- 星之彼端叶灵真伤流怎么搭配阵容