K8s Service资源用法

操作小练习

Service的端口号暴露写法

---
apiVersion: v1
kind: Service
metadata:
  name: kube-node-service
  labels:
    name: kube-node-service
spec:
  type: NodePort      #这里代表是NodePort类型的
  ports:
  - port: 80          #这里的端口和clusterIP(10.97.114.36)对应,即10.97.114.36:80,供内部访问。
    targetPort: 8081  #端口一定要和container暴露出来的端口对应,nodejs暴露出来的端口是8081,所以这里也应是8081
    protocol: TCP
    nodePort: 32143   # 所有的节点都会开放此端口,此端口供外部调用。
  selector:
    app: web          #这里选择器一定要选择容器的标签,之前写name:kube-node是错的。

1、创建一个deployment副本数3,然后滚动更新镜像版本,并记录这个更新记录,最后再回滚到上一个版本

[root@master ~]# cat test.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: web
        image: jiejiehao/httpd:v3
        imagePullPolicy: IfNotPresent
[root@master ~]# kubectl apply -f test.yml 
deployment.apps/web configured

[root@master ~]# kubectl get deployment
NAME   READY   UP-TO-DATE   AVAILABLE   AGE
web    3/3     3            3           47h

[root@master ~]# kubectl get pod
NAME                   READY   STATUS               RESTARTS   AGE
web-5bbdcb8db8-blkpx   1/1     Running              0          5s
web-5bbdcb8db8-k6wll   1/1     Running              0          3s
web-5bbdcb8db8-pgfgb   1/1     Running              0          9s


//升级(kubectl set image deployment.apps/{deployment名称} {镜像名称}:={镜像名称}:{版本}[root@master ~]# kubectl set image deployment.apps/web web=jiejiehao/httpd:v2
deployment.apps/web image updated

[root@master ~]# kubectl get pod
NAME                   READY   STATUS               RESTARTS   AGE
web-58b97c8959-b9btn   1/1     Running              0          17s
web-58b97c8959-bw7wc   1/1     Running              0          14s
web-58b97c8959-t85hf   1/1     Running              0          15s
web-5bbdcb8db8-blkpx   1/1     Terminating          0          2m38s
web-5bbdcb8db8-k6wll   1/1     Terminating          0          2m36s
web-5bbdcb8db8-pgfgb   1/1     Terminating          0          2m42s


//回滚默认情况下, Deployment 的上线记录都会保留在系统中,以便可以随时回滚,查看 Deployment 的上线历史记录
[root@master ~]# kubectl rollout history deployment web
deployment.apps/web 
REVISION  CHANGE-CAUSE
7         <none>
8         <none>

//回滚到上一个版本
[root@master ~]# kubectl rollout undo deploy/web
deployment.apps/web rolled back

2、给一个应用扩容副本数为5

[root@master ~]# kubectl scale deploy/web --replicas=5
deployment.apps/web scaled

[root@master ~]# kubectl get deploy,pod
NAME                   READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/web    5/5     5            5           47h

NAME                       READY   STATUS               RESTARTS   AGE
pod/web-5bbdcb8db8-5jjts   1/1     Running              0          41s
pod/web-5bbdcb8db8-cv7np   1/1     Running              0          13s
pod/web-5bbdcb8db8-dvvjq   1/1     Running              0          13s
pod/web-5bbdcb8db8-ntpkn   1/1     Running              0          43s
pod/web-5bbdcb8db8-v8sxm   1/1     Running              0          42s

3、创建一个pod,其中运行着nginx、redis、memcached 3个容器

[root@master ~]# cat pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: test
  labels:
    app: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  - name: redis
    image: redis
    imagePullPolicy: IfNotPresent
  - name: memcached
    image: memcached
    imagePullPolicy: IfNotPresent
[root@master ~]# kubectl apply -f pod.yaml 
pod/test created

[root@master ~]# kubectl get pod
NAME                   READY   STATUS               RESTARTS   AGE
test                   3/3     Running              0          11m

4、给一个pod创建service,并可以通过ClusterlP/NodePort访问

[root@master ~]# cat web01.yaml 
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web1
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web1
  template:  
    metadata:
      labels:
        app: web1
    spec:
      containers:
      - name: web1
        image: jiejiehao/httpd:v1
---
apiVersion: v1
kind: Service
metadata:
  name: web1
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
    nodePort: 30000
  selector:
    app: web1
  type: NodePort

[root@master ~]# kubectl apply web01.yaml 
error: must specify one of -f and -k
[root@master ~]# kubectl apply -f web01.yaml 
deployment.apps/web1 unchanged
service/web1 unchanged
[root@master ~]# kubectl get pod,svc
NAME                       READY   STATUS               RESTARTS   AGE
pod/web1-99dd54ccd-jw9w6   1/1     Running              1          33h

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/web1         NodePort    10.105.63.49    <none>        80:30000/TCP   33s
    
[root@master ~]# curl 10.105.63.49
test page on v1
[root@master ~]# kubectl get node -o wide
NAME     STATUS     ROLES                  AGE   VERSION   INTERNAL-IP      EXTERNAL-IP   OS-IMAGE                               KERNEL-VERSION          CONTAINER-RUNTIME
master   Ready      control-plane,master   8d    v1.20.0   192.168.47.115   <none>        Red Hat Enterprise Linux 8.2 (Ootpa)   4.18.0-193.el8.x86_64   docker://20.10.12
node1    Ready      <none>                 8d    v1.20.0   192.168.47.120   <none>        Red Hat Enterprise Linux 8.2 (Ootpa)   4.18.0-193.el8.x86_64   docker://20.10.12
node2    Ready      <none>                 8d    v1.20.0   192.168.47.121   <none>        Red Hat Enterprise Linux 8.2 (Ootpa)   4.18.0-193.el8.x86_64   docker://20.10.12
    

[root@master ~]# curl 192.168.47.115:30000
test page on v1
[root@master ~]# curl 192.168.47.120:30000
test page on v1
[root@master ~]# curl 192.168.47.121:30000
test page on v1
   

5、创建deployment和service,使用busybox容器nslookup解析service

[root@master ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
httpd        NodePort    10.103.50.196   <none>        80:30263/TCP   5d22h
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        8d
web1         NodePort    10.105.63.49    <none>        80:30000/TCP   33h
[root@master ~]# kubectl run -it b1 --image busybox -- /bin/sh
If you don't see a command prompt, try pressing enter.
/ # wget -qO - web1
test page on v1

/ # wget -qO - http://web1.default.svc.cluster.local
test page on v1


/ # nslookup web1.default.svc.cluster.local
Server:         10.96.0.10
Address:        10.96.0.10:53

Name:   web1.default.svc.cluster.local
Address: 10.105.63.49

*** Can't find web1.default.svc.cluster.local: No answer


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值