虚拟化容器,大数据,DBA,中间件,监控。

k8s常用资源之svc资源(五)

11 11月
作者:admin|分类:容器虚拟化

k8s常用资源之svc资源

1.k8s资源常见操作

创建一个资源
kubectl create -f xxx.yaml

查看一个资源
kubectl get pod | rc

查看一个资源的详细过程
kubectl describe pos pod_name

删除一个资源
kubectl delete pod pod_name
kubectl delete -f xxx.yaml

编辑一个资源的配置文件
kubectl edit pod pod_name

2.svc资源

svc资源可以调用kube-proxy组件,将容器进行端口映射,使外网用户可以访问到容器中的资源

svc利用的是vip

k8sip类型:nodeip(节点ip)、podip(pod资源的ip)、vip(虚拟ip)

之前都是一个pod映射一个端口,如果有多个pod,这时就要采用负载均衡,但是负载均衡里面的地址不能写死,因为有时可能pod会死,pod重新上来一个后端口和ip都会发生改变,这是就要采用k8s的svc资源和虚拟ip来解决此问题,写死虚拟ip即可,当pod死了之后,svc会根据设置的标签去选择pod资源,并将其加入负载均衡集群,不需要人为手动干预

svc资源创建的容器可以使用任意节点的ip+端口即可访问

svc资源指定的端口默认从30000开始,如果要修改请编辑/etc/kubenetes/apiserver配置文件,默认地址为10.254.0.0/16

svc默认采用iptables进行负载均衡使用iptables -t nat -nL

svc默认类型是ClusterIP,使用vip,外界无法访问,常用于数据库,因为数据库不需要被外界访问

2.1.编写svc资源文件

准备svc资源yaml文件
[root@k8s-master svc]# vim k8s_svc.yaml
apiVersion: v1				//api版本
kind: Service			//资源类型
metadata:				//资源属性
  name: myweb			//资源的名称
spec:
  type: NodePort			//src资源的类型,nodeport表示端口映射
  ports:
    - port: 80				//虚拟ip的端口
      nodePort: 30000				//节点映射后的端口
      targetPort: 80			//pod资源的端口
  selector:	
    app: myweb2				//根据那个标签去控制pod

2.2.创建svc资源

1)创建svc资源
[root@k8s-master svc]# kubectl create -f k8s_svc.yaml
service "myweb" created

2)查看创建的svc资源
[root@k8s-master svc]# kubectl get all -o wide
NAME         DESIRED   CURRENT   READY     AGE       CONTAINER(S)   IMAGE(S)                        SELECTOR
rc/nginxrc   5         5         5         23h       myweb          192.168.81.240/k8s/nginx:1.13   app=myweb

NAME             CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE       SELECTOR
svc/kubernetes   10.254.0.1      <none>        443/TCP        9d        <none>
svc/myweb        10.254.137.46   <nodes>       80:30000/TCP   48s       app=myweb2

NAME               READY     STATUS    RESTARTS   AGE       IP            NODE
po/nginxrc-35qbl   1/1       Running   0          23h       172.16.16.3   192.168.81.230
po/nginxrc-49zvz   1/1       Running   0          23h       172.16.56.2   192.168.81.220
po/nginxrc-82bcf   1/1       Running   0          23h       172.16.56.3   192.168.81.220
po/nginxrc-kjrjd   1/1       Running   0          23h       172.16.56.4   192.168.81.220
po/nginxrc-kwbwp   1/1       Running   0          23h       172.16.16.2   192.168.81.230

3)查看svc的详细信息,发现没有任何节点
[root@k8s-master svc]# kubectl describe svc myweb 
Name:			myweb
Namespace:		default
Labels:			<none>
Selector:		app=myweb2
Type:			NodePort
IP:			10.254.137.46
Port:			<unset>	80/TCP
NodePort:		<unset>	30000/TCP
Endpoints:		<none>
Session Affinity:	None
No events.

4)没有节点配置是由于svc的标签和rc资源的标签不一致导致的,我们将svc的标签修改为rc的标签即可
[root@k8s-master svc]# kubectl edit svc myweb
    app: myweb		22行
service "myweb" edited

5)再次查看svc资源的过程
[root@k8s-master svc]# kubectl describe svc myweb 
Name:			myweb
Namespace:		default
Labels:			<none>
Selector:		app=myweb
Type:			NodePort
IP:			10.254.137.46
Port:			<unset>	80/TCP
NodePort:		<unset>	30000/TCP
Endpoints:		172.16.16.2:80,172.16.16.3:80,172.16.56.2:80 + 2 more...
Session Affinity:	None
No events.

6)访问即可

在这里插入图片描述

2.3.访问资源

[root@k8s-master svc]# curl  -I 192.168.81.230:30000
HTTP/1.1 200 OK
Server: nginx/1.13.12
Date: Mon, 20 Jul 2020 15:46:06 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 09 Apr 2018 16:01:09 GMT
Connection: keep-alive
ETag: "5acb8e45-264"
Accept-Ranges: bytes

[root@k8s-master svc]# curl  -I 192.168.81.220:30000
HTTP/1.1 200 OK
Server: nginx/1.13.12
Date: Mon, 20 Jul 2020 15:46:09 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 09 Apr 2018 16:01:09 GMT
Connection: keep-alive
ETag: "5acb8e45-264"
Accept-Ranges: bytes

在这里插入图片描述

2.5.修改svc端口范围

1)修改端口范围并重启
[root@k8s-master svc]# vim /etc/kubernetes/apiserver
KUBE_API_ARGS="--service-node-port-range=3000-50000"
[root@k8s-master svc]# systemctl restart kube-apiserver.service 

2)创建一个svc资源,设置node端口为3000
[root@k8s-master svc]# vim k8s_svc2.yaml 
apiServer: v1
kind: Service
metadata:
  name: myweb2
spec:
  type: NodePort
  ports:
    - port: 80
      nodePort: 3000
      targetPort: 80
  selector:
      app: myweb2

[root@k8s-master svc]# kubectl create -f k8s_svc2.yaml
service "myweb2" created

3)修改svc标签,可以一次性写好,一次性写好可以省略此步操作
[root@k8s-master svc]# kubectl edit svc myweb2
    app: myweb			22行
service "myweb2" edited

4)再次查看节点
[root@k8s-master svc]# kubectl describe svc myweb2
Name:			myweb2
Namespace:		default
Labels:			<none>
Selector:		app=myweb
Type:			NodePort
IP:			10.254.250.66
Port:			<unset>	80/TCP
NodePort:		<unset>	3000/TCP
Endpoints:		172.16.16.2:80,172.16.16.3:80,172.16.56.2:80 + 2 more...
Session Affinity:	None
No events.

5)访问
[root@k8s-master svc]# curl -I 192.168.81.220:3000
HTTP/1.1 200 OK

[root@k8s-master svc]# curl -I 192.168.81.230:3000
HTTP/1.1 200 OK

在这里插入图片描述

iptables负载均衡规则
在这里插入图片描述

4.6.删除svc

[root@k8s-master svc]# kubectl delete svc myweb
service "myweb" deleted
浏览446 评论0
返回
目录
返回
首页
k8s常用资源之deployment资源(六) k8s常用资源之pod资源(三)