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


相关内容

热门资讯

122.(leaflet篇)l... 听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行...
育碧GDC2018程序化大世界... 1.传统手动绘制森林的问题 采用手动绘制的方法的话,每次迭代地形都要手动再绘制森林。这...
育碧GDC2018程序化大世界... 1.传统手动绘制森林的问题 采用手动绘制的方法的话,每次迭代地形都要手动再绘制森林。这...
Vue使用pdf-lib为文件... 之前也写过两篇预览pdf的,但是没有加水印,这是链接:Vu...
PyQt5数据库开发1 4.1... 文章目录 前言 步骤/方法 1 使用windows身份登录 2 启用混合登录模式 3 允许远程连接服...
Android studio ... 解决 Android studio 出现“The emulator process for AVD ...
Linux基础命令大全(上) ♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维...
再谈解决“因为文件包含病毒或潜... 前面出了一篇博文专门来解决“因为文件包含病毒或潜在的垃圾软件”的问题,其中第二种方法有...
南京邮电大学通达学院2023c... 题目展示 一.问题描述 实验题目1 定义一个学生类,其中包括如下内容: (1)私有数据成员 ①年龄 ...
PageObject 六大原则 PageObject六大原则: 1.封装服务的方法 2.不要暴露页面的细节 3.通过r...
【Linux网络编程】01:S... Socket多进程 OVERVIEWSocket多进程1.Server2.Client3.bug&...
数据结构刷题(二十五):122... 1.122. 买卖股票的最佳时机 II思路:贪心。把利润分解为每天为单位的维度,然后收...
浏览器事件循环 事件循环 浏览器的进程模型 何为进程? 程序运行需要有它自己专属的内存空间࿰...
8个免费图片/照片压缩工具帮您... 继续查看一些最好的图像压缩工具,以提升用户体验和存储空间以及网站使用支持。 无数图像压...
计算机二级Python备考(2... 目录  一、选择题 1.在Python语言中: 2.知识点 二、基本操作题 1. j...
端电压 相电压 线电压 记得刚接触矢量控制的时候,拿到板子,就赶紧去测各种波形,结...
如何使用Python检测和识别... 车牌检测与识别技术用途广泛,可以用于道路系统、无票停车场、车辆门禁等。这项技术结合了计...
带环链表详解 目录 一、什么是环形链表 二、判断是否为环形链表 2.1 具体题目 2.2 具体思路 2.3 思路的...
【C语言进阶:刨根究底字符串函... 本节重点内容: 深入理解strcpy函数的使用学会strcpy函数的模拟实现⚡strc...
Django web开发(一)... 文章目录前端开发1.快速开发网站2.标签2.1 编码2.2 title2.3 标题2.4 div和s...