您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
32、 Service 实验讲解(1)
发布时间:2022-12-20 22:38:02编辑:雪饮阅读()
Step1
首先是创建一个deployment的模板
[root@k8s-master01 ~]# cat myapp-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deploy
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: myapp
release: stabel
template:
metadata:
labels:
app: myapp
release: stabel
env: test
spec:
containers:
- name: myapp
image: wangyanglinux/myapp:v2
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 80
接着是创建这个deployment
[root@k8s-master01 ~]# kubectl apply -f myapp-deployment.yaml
deployment.apps/myapp-deploy created
可以看到是已经运行了
[root@k8s-master01 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
myapp-deploy-6cc7c66999-92mfh 1/1 Running 0 76s
myapp-deploy-6cc7c66999-vnxqv 1/1 Running 0 76s
myapp-deploy-6cc7c66999-x5rgr 1/1 Running 0 76s
自然是也可以访问咯,当然这里只是访问其中一个节点而已了
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
myapp-deploy-6cc7c66999-92mfh 1/1 Running 0 103s 10.224.1.121 k8s-node01 <none> <none>
myapp-deploy-6cc7c66999-vnxqv 1/1 Running 0 103s 10.224.1.120 k8s-node01 <none> <none>
myapp-deploy-6cc7c66999-x5rgr 1/1 Running 0 103s 10.224.2.109 k8s-node02 <none> <none>
[root@k8s-master01 ~]# curl 10.224.2.109
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
Step2
创建service模板
[root@k8s-master01 ~]# cat myapp-service.yaml
apiVersion: v1
kind: Service
metadata:
name : myapp
namespace: default
spec:
type: ClusterIP
selector:
app: myapp1
release: stabel
ports:
- name: http
port: 80
targetPort: 80
注意留意这里的myapp1,和上面的deployment是不同的。
那么服务创建了
[root@k8s-master01 ~]# kubectl apply -f myapp-service.yaml
service/myapp created
那么自然是访问不到了
[root@k8s-master01 ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6d23h
myapp ClusterIP 10.102.118.169 <none> 80/TCP 112s
[root@k8s-master01 ~]# curl 10.102.118.169
curl: (7) Failed connect to 10.102.118.169:80; 拒绝连接
因为他相当于建立了一个空的服务,没有和后端端点关联。
查看ipvs也是一样
[root@k8s-master01 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.96.0.1:443 rr
-> 192.168.66.10:6443 Masq 1 2 0
TCP 10.96.0.10:53 rr
-> 10.224.0.10:53 Masq 1 0 0
TCP 10.96.0.10:9153 rr
-> 10.224.0.10:9153 Masq 1 0 0
TCP 10.102.118.169:80 rr
UDP 10.96.0.10:53 rr
-> 10.224.0.10:53 Masq 1 0 0
可以看到10.102.118.169这个tcp并没有相关负载路由
那么我们删除这个service并重新修改为正常情况下再次重新创建
[root@k8s-master01 ~]# kubectl delete -f myapp-service.yaml
service "myapp" deleted
[root@k8s-master01 ~]# vi myapp-service.yaml
[root@k8s-master01 ~]# cat myapp-service.yaml
apiVersion: v1
kind: Service
metadata:
name : myapp
namespace: default
spec:
type: ClusterIP
selector:
app: myapp
release: stabel
ports:
- name: http
port: 80
targetPort: 80
[root@k8s-master01 ~]# kubectl apply -f myapp-service.yaml
service/myapp created
再次查看svc并访问集群ip是没有问题的
[root@k8s-master01 ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6d23h
myapp ClusterIP 10.101.243.120 <none> 80/TCP 89s
[root@k8s-master01 ~]# curl 10.101.243.120
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
然后ipvsadm也有对应的记录了
[root@k8s-master01 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.96.0.1:443 rr
-> 192.168.66.10:6443 Masq 1 2 0
TCP 10.96.0.10:53 rr
-> 10.224.0.10:53 Masq 1 0 0
TCP 10.96.0.10:9153 rr
-> 10.224.0.10:9153 Masq 1 0 0
TCP 10.101.243.120:80 rr
-> 10.224.1.120:80 Masq 1 0 0
-> 10.224.1.121:80 Masq 1 0 0
-> 10.224.2.109:80 Masq 1 0 1
UDP 10.96.0.10:53 rr
-> 10.224.0.10:53 Masq 1 0 0
所以我们只需要访问一个集群ip即可
[root@k8s-master01 ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
myapp-deploy-6cc7c66999-92mfh 1/1 Running 0 17m 10.224.1.121 k8s-node01 <none> <none>
myapp-deploy-6cc7c66999-vnxqv 1/1 Running 0 17m 10.224.1.120 k8s-node01 <none> <none>
myapp-deploy-6cc7c66999-x5rgr 1/1 Running 0 17m 10.224.2.109 k8s-node02 <none> <none>
[root@k8s-master01 ~]# curl 10.101.243.120
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
Step3
创建无头服务模板
[root@k8s-master01 ~]# cat svc-none.yaml
apiVersion: v1
kind: Service
metadata:
name: myapp-headless
namespace: default
spec:
selector:
app: myapp
clusterIP: "None"
ports:
- port: 80
targetPort: 80
并创建无头服务
[root@k8s-master01 ~]# kubectl apply -f svc-none.yaml
service/myapp-headless created
无头服务集群ip是空的
[root@k8s-master01 ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 7d
myapp ClusterIP 10.101.243.120 <none> 80/TCP 10m
myapp-headless ClusterIP None <none> 80/TCP 77s
然后据说这里好像和coredns哪里有点关系
[root@k8s-master01 ~]# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-5c98db65d4-9thzq 1/1 Running 7 7d
coredns-699cc4c4cb-d4wjw 0/1 CrashLoopBackOff 158 6d23h
coredns-699cc4c4cb-kt7rb 0/1 CrashLoopBackOff 158 6d23h
etcd-k8s-master01 1/1 Running 7 7d
kube-apiserver-k8s-master01 1/1 Running 7 7d
kube-controller-manager-k8s-master01 1/1 Running 7 7d
kube-flannel-ds-amd64-bmt5w 1/1 Running 7 7d
kube-flannel-ds-amd64-swvpl 1/1 Running 7 7d
kube-flannel-ds-amd64-zzjkf 1/1 Running 14 7d
kube-proxy-4lwzp 1/1 Running 7 7d
kube-proxy-m6bsz 1/1 Running 7 7d
kube-proxy-xqhhg 1/1 Running 7 7d
kube-scheduler-k8s-master01 1/1 Running 7 7d
我这里有两个coredns是有问题的,那么其实可以通过查看日志,如
kubectl describe pod coredns-699cc4c4cb-kt7rb -n kube-system
来查看是否有相关可以利用的情报来逐渐解决这个问题,不过我这里不决定要解决,因为我至少有个coredns是可以用的,暂时不知道这样情况下影响多大,至少我目前应该还是感觉够用的。
那么其实坏了的这两个coredns之前是曾经被我弄坏折腾过几次。
不过这里暂时还是先别管了,走一步看一步吧。
关键字词:Service,实验,讲解
下一篇:33、Service 实验讲解