k8s-Kubernetes--pod管理-基本操作
创始人
2024-05-31 03:43:55
0

文章目录

  • 前言
  • 一、简介
    • 一些简单的入门小命令
  • 二、pod基本操作
    • 1.pod创建
    • 2.pod删除,查看日志
  • 三、service和deployment(控制器)
    • 1.deployment基本操作
    • 2.Pod扩容与缩容
    • 3.expose暴露端口
      • 3.1ClusterIP默认类型暴露端口
      • 3.2 NodePort类型暴露端口
    • 4.升级pod镜像/应用版本
    • 5.回滚
    • 6.删除应用


前言


一、简介

Pod是可以创建和管理Kubernetes计算的最小可部署单元,一个Pod代表着集群中运行的一个进程,每个pod都有一个唯一的ip。

一个pod类似一个豌豆荚,包含一个或多个容器(通常是docker),多个容器间共享IPC、Network和UTC namespace。
kubectl命令:https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands
在这里插入图片描述
1.超亲密容器之间的通信,一个pod内的容器共享一个网络栈
2.共享数据,提供相对持久化的存储
pod环境来自于pause镜像

一些简单的入门小命令

[root@server2 ~]# kubectl get pod   ##获取pod[root@server2 ~]# kubectl  get ns   ##查看namespace
NAME              STATUS   AGE
default           Active   42h
kube-node-lease   Active   42h
kube-public       Active   42h
kube-system       Active   42h
[root@server2 ~]# kubectl get pod -n kube-system   ##查看相应namespace对应的pod,不加namespace就自动选择默认的namespace
NAME                              READY   STATUS    RESTARTS   AGE
coredns-7f89b7bc75-4r9x6          1/1     Running   1          42h
coredns-7f89b7bc75-sxgkp          1/1     Running   1          42h
etcd-server2                      1/1     Running   4          42h
kube-apiserver-server2            1/1     Running   3          42h
kube-controller-manager-server2   1/1     Running   3          42h
kube-flannel-ds-amd64-9m29g       1/1     Running   1          36h
kube-flannel-ds-amd64-c2rc7       1/1     Running   1          41h
kube-flannel-ds-amd64-xnb9p       1/1     Running   1          36h
kube-proxy-dlxmm                  1/1     Running   1          36h
kube-proxy-mh677                  1/1     Running   1          36h
kube-proxy-p87p4                  1/1     Running   3          42h
kube-scheduler-server2            1/1     Running   4          42h
[root@server2 ~]# kubectl describe pod coredns-7f89b7bc75-4r9x6 -n kube-system  ##如果出错可以使用这条命令来查看错误信息,要标明对应的namespace
[root@server2 ~]# kubectl delete pod cDoredns-7f89b7bc75-4r9x6 -n kube-system   ##删除对应的pod

二、pod基本操作

1.pod创建

创建自主式pod :没有自愈性(生产不推荐)
[root@k8s2 ~]# kubectl run demo --image=myapp:v1
创建控制器(推荐)
[root@k8s2 ~]# kubectl create deployment myapp --image=myapp:v1 --replicas=3
[root@server2 ~]# kubectl run -h                       ##查看创建pod帮助
[root@server2 ~]# kubectl run nginx --image=myapp:v1   ##创建一个pod应用,nginx是名字,myapp是镜像#--replicas=2   扩容参数  --record   记录参数# kubectl run nginx --image=nginx --replicas=2 --record #参数使用方法
[root@server2 ~]# kubectl get pod               ##查看pod
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          11s
[root@server2 ~]# kubectl get pod -n default    ##查看指定namespace的节点
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          25s
[root@server2 ~]# kubectl get pod -o wide      ##查看节点的具体信息
NAME    READY   STATUS    RESTARTS   AGE   IP           NODE      NOMINATED NODE   READINESS GATES
nginx   1/1     Running   0          71s   10.244.2.3   server4              [root@server2 ~]# kubectl run demo --image=busyboxplus -it   ##交互式界面运行一个pod,ctrl+p+q退出,可以通过kubectl attach demo -c demo -i -t重新进入
[root@server2 ~]# kubectl run demo --image=busyboxplus -it   ##再次进入

2.pod删除,查看日志

[root@server2 ~]# kubectl delete pod nginx    ##删除pod
pod "nginx" deleted
[root@server2 ~]# kubectl describe pod demo   ##查看详细描述
[root@server2 ~]# kubectl logs demo           ##查看日志

三、service和deployment(控制器)

1.deployment基本操作

控制器自动维护pod副本数

[root@server2 ~]# kubectl create deployment nginx --image=myapp:v1  ##创建一个pod
deployment.apps/nginx created    ##生成一个新的deployment控制器的pod,删除之后会自动重新生成不同id的pod
[root@server2 ~]# kubectl get all
NAME                         READY   STATUS    RESTARTS   AGE
pod/demo                     1/1     Running   0          70m
pod/nginx-67f9d9c97f-mb6zb   1/1     Running   0          13s     ##id为mb6zb [root@server2 ~]# kubectl delete pod nginx-67f9d9c97f-mb6zb       ##删除pod后再查看
pod "nginx-67f9d9c97f-mb6zb" deleted
[root@server2 ~]# kubectl get pod                                 ##生成新的id的pod
NAME                     READY   STATUS    RESTARTS   AGE
demo                     1/1     Running   0          73m
nginx-67f9d9c97f-4stvr   1/1     Running   0          16s
[root@server2 ~]# kubectl get deployments.apps
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
myapp   1/1     1            1           16s[root@server2 ~]# kubectl delete deployment nginx                 ##彻底删除deployment
[root@server2 ~]# kubectl get pod                                 ##删除成功
NAME   READY   STATUS    RESTARTS   AGE
demo   1/1     Running   0          74m

在远程pod中执行命令
[root@k8s2 ~]# kubectl exec nginx-67f9d9c97f-4stvr – ls /usr/share/nginx/html
50x.html
index.html

2.Pod扩容与缩容

[root@server2 ~]# kubectl scale deployment --replicas=2 nginx  
[root@server2 ~]# kubectl scale deployment nginx --replicas=2   ##以上两种书写方式都可以
deployment.apps/nginx scaled
[root@server2 ~]# kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
demo                     1/1     Running   0          76m
nginx-67f9d9c97f-48gfz   1/1     Running   0          27s
nginx-67f9d9c97f-jh76r   1/1     Running   0          2s
[root@server2 ~]# kubectl scale deployment --replicas=4 nginx   ##扩容为4个
deployment.apps/nginx scaled
[root@server2 ~]# kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
demo                     1/1     Running   0          76m
nginx-67f9d9c97f-48gfz   1/1     Running   0          43s
nginx-67f9d9c97f-7gh4m   1/1     Running   0          3s
nginx-67f9d9c97f-hcd5z   1/1     Running   0          3s
nginx-67f9d9c97f-jh76r   1/1     Running   0          18s
[root@server2 ~]# kubectl  scale deployment nginx --replicas=3  ##缩容为3个
deployment.apps/myapp scaled
[root@server2 ~]# kubectl get pod

3.expose暴露端口

- service是一个抽象概念,定义了一个服务的多个pod逻辑合集和访问pod的策略,一般把service称为微服务。- 创建service$ kubectl expose deployment(控制器) nginx --port=80 --target-port=80此时pod客户端可以通过service的名称访问后端的两个PodClusterIP: 默认类型,自动分配一个仅集群内部可以访问的虚拟IP- 使用NodePort类型暴露端口,让外部客户端访问Pod(即真机也可以访问)$ kubectl edit svc nginx		//修改service的type为NodePort$ kubectl expose deployment nginx --port=80 --target-port=80 --type=NodePort		//也可以在创建service时指定类型NodePort: 在ClusterIP基础上为Service在每台机器上绑定一个端口,这样就可以通过  NodeIP:NodePort 来访问该服务

service自动发现pod扩容与缩容,自动更新endpoints,实现对应用的负载均衡

service默认使用 ClusterIP类型,只能在集群中访问
NodePort类型,可以在集群外部访问

3.1ClusterIP默认类型暴露端口

[root@server2 ~]# kubectl expose deployment nginx --port=80   ##ClusterIP默认类型暴露端口
service/nginx exposed
[root@server2 ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1                443/TCP   45h
nginx        ClusterIP   10.104.139.148           80/TCP    9s
[root@server2 ~]# curl 10.104.139.148
Hello MyApp | Version: v1 | Pod Name
[root@server2 ~]# curl 10.104.139.148/hostname.html
nginx-67f9d9c97f-48gfz
[root@server2 ~]# curl 10.104.139.148/hostname.html
nginx-67f9d9c97f-hcd5z
[root@server2 ~]# curl 10.104.139.148/hostname.html
nginx-67f9d9c97f-hcd5z
[root@server2 ~]# curl 10.104.139.148/hostname.html
nginx-67f9d9c97f-48gfz
[root@server2 ~]# kubectl describe svc nginx                ##查看deployment详细信息
[root@server2 ~]# kubectl get pod -n kube-system  -o wide   ##查看namespace对应的所有pod详细信息##server3和server4上同样可以访问到对应信息
[root@server3 ~]# curl 10.104.139.148/hostname.html  
[root@server4 ~]# curl 10.104.139.148/hostname.html

3.2 NodePort类型暴露端口

通过service暴露pod
[root@k8s2 ~]# kubectl expose deployment myapp --port=80 --target-port=80查看svc详情 
[root@k8s2 ~]# kubectl describe  svc myapp
Name:              myapp
Namespace:         default
Labels:            app=myapp
Annotations:       
Selector:          app=myapp
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.106.225.101
IPs:               10.106.225.101
Port:                80/TCP
TargetPort:        80/TCP
Endpoints:         10.244.1.2:80,10.244.1.3:80,10.244.2.4:80        ##3个地址为pod内的3个ip地址,svc对Endpoints进行随机的负载均衡
Session Affinity:  None
Events:            
[root@server2 ~]# kubectl get svc          ##查看TYPE,svc为service的简写[root@server2 ~]# kubectl edit svc nginx   ##type改成NodePort ##集群外真机可以访问
[root@server2 ~]# kubectl get svc          ##80映射31147端口
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1                443/TCP        45h
nginx        NodePort    10.104.139.148           80:31147/TCP   30m给集群所有节点绑定31147端口(端口为一对一),真机可以访问集群任何节点##真机测试:访问集群任意节点+端口
[root@server1 docker]# curl  192.168.117.12:31147/hostname.html
myapp-678fcbc488-gkf4z
[root@server1 docker]# curl  192.168.117.13:31147/hostname.html
myapp-678fcbc488-gqdgk
[root@server1 docker]# curl  192.168.117.14:31147/hostname.html
myapp-678fcbc488-v7ftf

4.升级pod镜像/应用版本

[root@server2 ~]# kubectl set image deployment/nginx myapp=myapp:v2 ##更新到v2
[root@server2 ~]# kubectl rollout history deployment nginx ##查看更新记录
更新应用版本【吴分享】
[root@k8s2 ~]# kubectl set image deployment/myapp myapp=myapp:v2
[root@k8s1 docker]# curl 192.168.56.14:30280
Hello MyApp | Version: v2 | Pod Name

5.回滚

$ kubectl rollout history deployment nginx	            //查看历史版本
$ kubectl rollout undo deployment nginx --to-revision=1	//回滚版本
[root@server2 ~]# kubectl rollout history deployment nginx
[root@server2 ~]# kubectl rollout undo deployment nginx --to-revision=1   ##回滚之前版本
deployment.apps/nginx rolled back
[root@server2 ~]# kubectl rollout history deployment nginx
deployment.apps/nginx 
REVISION  CHANGE-CAUSE
2         
3         
[root@server2 ~]# kubectl get pod   ##rs值变成版本1的rs值
NAME                     READY   STATUS    RESTARTS   AGE
demo                     1/1     Running   0          136m
nginx-67f9d9c97f-mv6n2   1/1     Running   0          22s
nginx-67f9d9c97f-zgpgh   1/1     Running   0          23s
[root@server2 ~]# kubectl describe deployments.apps nginx

6.删除应用

[root@server2 ~]# kubectl delete  deployments.apps myapp
[root@server2 ~]# kubectl delete svc myapp[root@server2 ~]# kubectl get pod
No resources found in default namespace.

集群通过namespace来做资源隔离,默认操作的资源都指向default
[root@k8s2 ~]# kubectl get ns
NAME STATUS AGE
default Active 2d22h
kube-flannel Active 2d22h
kube-node-lease Active 2d22h
kube-public Active 2d22h
kube-system Active 2d22h


相关内容

热门资讯

安卓系统对比骁龙,性能与生态的... 你有没有想过,为什么你的手机里装的是安卓系统,而不是苹果的iOS呢?又或者,为什么你的安卓手机里搭载...
qt程序安卓系统运行,基于Qt... 你有没有想过,为什么有些手机上的程序运行得那么顺畅,而有些却总是卡得让人抓狂?今天,就让我来给你揭秘...
安卓系统免费应用推荐,助你畅享... 手机里的应用是不是越来越多,有时候都挑花眼了呢?别急,今天我就来给你推荐一些安卓系统上的免费应用,让...
安卓系统视频通话app,打造无... 你有没有发现,现在手机上的视频通话功能越来越强大了?尤其是安卓系统上的那些视频通话app,简直让人爱...
安卓系统发现高危病毒,守护手机... 亲爱的手机用户们,最近可是有个大消息在安卓系统用户群里炸开了锅!没错,就是安卓系统发现了一款高危病毒...
安卓系统疯狂弹广告,揭秘广告软... 你有没有遇到过这种情况?手机里突然弹出一个广告,让你瞬间心情大崩溃?没错,说的就是安卓系统那让人头疼...
ebook 10进入安卓系统 你有没有发现,最近你的安卓手机里多了一个新伙伴——那就是电子书(ebook)10!没错,就是那个我们...
安卓系统如何调听筒,安卓系统调... 手机听筒声音突然变小了?别急,让我来教你如何轻松调教安卓系统的听筒,让它重新恢复活力!一、检查音量设...
安卓系统是怎么手机,解锁智能生... 你有没有想过,我们每天不离手的安卓手机,它背后的安卓系统究竟是怎么一回事呢?今天,就让我带你一探究竟...
安卓系统能代替windows系... 你有没有想过,我们日常使用的安卓系统和Windows系统,哪个才是真正的霸主呢?是不是有时候觉得安卓...
lp108安卓系统,功能特点与... 你有没有听说最近LP108安卓系统火得一塌糊涂?没错,就是那个让无数手机用户都为之疯狂的新系统!今天...
安卓系统挂载u盘,轻松实现数据... 你有没有想过,你的安卓手机或平板电脑突然变成了一个移动的U盘?没错,就是那种可以随意存取文件的神奇设...
i5 安卓系统,引领智能终端新... 你有没有想过,为什么你的手机总是卡得要命,而别人的手机却能流畅如丝?是不是因为你的手机搭载了那个传说...
安卓手机系统没有升级,揭秘潜在... 你有没有发现,你的安卓手机系统好像好久没升级了呢?是不是觉得有点out了?别急,今天就来给你详细聊聊...
安卓14系统定制v,创新功能与... 你知道吗?最近安卓系统又出新花样了!安卓14系统定制版V,这名字听起来就让人兴奋不已。今天,就让我带...
手机安卓系统越高越好,探索最新... 你有没有发现,每次手机更新系统,你的手机就像脱胎换骨了一样?没错,说的就是你,那个安卓手机!今天,咱...
鸿蒙系统怎么用回安卓,轻松实现... 你是不是也和我一样,对鸿蒙系统的新鲜感还没过,却又忍不住想回到熟悉的安卓世界?别急,今天就来手把手教...
苹果7跟安卓系统,性能对决与用... 你有没有想过,为什么苹果7那么受欢迎,而安卓系统却有着庞大的用户群体?今天,我们就来聊聊这个话题,看...
安卓手机刷简化系统,轻松实现流... 你有没有想过,你的安卓手机其实可以变得更加轻快、流畅呢?没错,就是通过刷简化系统!今天,就让我带你一...
社保掌上通安卓系统,轻松掌握在... 你有没有发现,现在的生活越来越离不开手机了?无论是购物、聊天还是办公,手机都能轻松搞定。这不,今天就...