k8s pod 管理

Pod是Kubernetes调度的最小单元。一个Pod可以包含一个或多个容器,因此它可以被看作是内部容器的逻辑宿主机。Pod的设计理念是为了支持多个容器在一个Pod*享网络和文件系统。因此处于一个Pod中的多个容器共享以下资源:

  • PID命名空间:Pod中不同的应用程序可以看到其他应用程序的进程ID。
  • network命名空间:Pod中多个容器处于同一个网络命名空间,因此能够访问的IP和端口范围都是相同的。也可以通过localhost相互访问。
  • IPC命名空间:Pod中的多个容器共享Inner-process Communication命名空间,因此可以通过SystemV IPC或POSIX进行进程间通信。
  • UTS命名空间:Pod中的多个容器共享同一个主机名。
  • Volumes:Pod中各个容器可以共享在Pod中定义分存储卷(Volume)。

pod常用操作

  

[root@server2 calio]# kubectl get namespaces 
NAME              STATUS   AGE
default           Active   4d
kube-node-lease   Active   4d
kube-public       Active   4d
kube-system       Active   4d
metallb-system    Active   23h

创建demo pod

[root@server2 calio]# kubectl run demo --image=myapp:v1
pod/demo created

查看 pod

[root@server2 ~]# kubectl get pod
NAME   READY   STATUS    RESTARTS   AGE
demo   1/1     Running   0          116s

查看指定 pod

[root@server2 ~]# kubectl  describe pod demo

k8s pod 管理

 

列出Pod以及运行Pod节点信息。

[root@server2 ~]# kubectl  get pod -o wide
NAME   READY   STATUS    RESTARTS   AGE     IP            NODE      NOMINATED NODE   READINESS GATES
demo   1/1     Running   0          4m36s   10.244.22.0   server4   <none>           <none>

查看flannel环境

[root@server2 ~]# cat /var/run/flannel/subnet.env 
FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.244.0.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true

删除demo pod

[root@server2 ~]# kubectl delete pod demo 
pod "demo" deleted

部署两个以demo命名的pod

[root@server2 ~]# kubectl  create  deployment  demo --image=myapp:v1 --replicas=2
[root@server2 ~]# kubectl  get pod -o wide

k8s pod 管理

k8s pod 管理

 

查看所有资源信息

k8s pod 管理

 子节点被删除后,rs会自动生成新的副本替代,保证规定节点数量

ReplicationController用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出,会自动创建新的Pod来替代;而如果异常多出来的容器也会自动回收。

[root@server2 ~]# kubectl delete pod/demo-5b4fc8bb88-cjbgv
[root@server2 ~]# kubectl  get pod -o wide

k8s pod 管理

k8s pod 管理

 

使用NodePort类型暴露端口,让外部客户端访问Pod

测试负载均衡

[root@server2 ~]# kubectl  expose  deployment demo  --port=80 --target-port=80
[root@server2 ~]# kubectl get all
[root@server2 ~]# curl 10.109.59.20/hostname.html

k8s pod 管理

 

查看demo资源信息

[root@server2 ~]# kubectl  describe  svc demo 
##输出指定的一个/多个资源的详细信息。

k8s pod 管理

 查看replicasets信息

[root@server2 ~]# kubectl  get rs
NAME              DESIRED   CURRENT   READY   AGE
demo-5b4fc8bb88   2         2         2       33m

集群拉伸,修改pod内节点部署数量

[root@server2 ~]# kubectl  scale  deployment  demo  --replicas=5
deployment.apps/demo scaled

k8s pod 管理

 

版本升级

[root@server2 ~]# kubectl  set image  deployment demo myapp=myapp:v2

k8s pod 管理

版本回滚

[root@server2 ~]# kubectl  rollout  undo deployment  demo --to-revision=1
deployment.apps/demo rolled back

k8s pod 管理

 

删除 demo pod

kubernetes 可能会产生垃圾或者僵尸pod,在删除rc的时候,相应的pod没有被删除,手动删除pod后会自动重新创建,这时一般需要先删除掉相关联的resources

[root@server2 ~]# kubectl get deployment

[root@server2 ~]# kubectl delete deployment demo 

[root@server2 ~]# kubectl get pod

k8s pod 管理

资源配置清单

在k8s中,一般使用yaml格式的文件来创建符合我们预期期望的pod,这样的yaml文件我们一般称为资源清单

资源清单格式

参数名(字段类型) 说明
api-version(String) k8s api的版本,目前基本是V1,可以使用kubectl api-versions命令查询
kind(String) yaml文件定义的资源类型和角色,,比如Pod
metadata(Object) 元数据对象,固定值就写metadata
metadata.name(String) 元数据对象的名字,由我们编写,如定义Pod的名
metadata.namespace 元数据对象的命名空间,由我们自身定义
spec(Object) 详细定义对象,固定值就写Spec
spec.containers[](list) Spec对象的容器列表定义,是个列表
spec.containers[].name(String) 定义容器的名字
spec.containers[].image(String) 容器用到的镜像名称

 资源清单可以一次性创建多个容器,组内成员共享网络

[root@server2 pot]# kubectl apply -f pots.yaml 
pod/pod-example created

[root@server2 pot]# cat pots.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-example
spec:
  containers:
  - name: myapp
    image: myapp:v1

  - name: busybox
    image: busyboxplus:latest
    tty: true
    stdin: true

[root@server2 pot]# kubectl get pod
NAME          READY   STATUS    RESTARTS   AGE
pod-example   2/2     Running   0          2m55s

成员可以相互通信
进入交互界面,查看ip,直接访问本地,可以获取nginx成员的默认发布页面,说明共用一个ip

[root@server2 pot]# kubectl attach pod-example -c busybox -it
进入busybox 内部查看

k8s pod 管理

 

 设置cpu以及内存大小

[root@server2 pot]# cat pots.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-example
spec:
  containers:
  - name: myapp
    image: myapp:v1
    resources:           #限制  requests最小要求  limits最大限制
      requests:
        cpu: "100m"
        memory: "50Mi"
      limits:
        cpu: "200m"
        memory: "100Mi"
  - name: busybox
    image: busyboxplus:latest
    tty: true
    stdin: true


[root@server2 pot]# kubectl apply -f pots.yaml 
pod/pod-example created

指定部署主机

apiVersion: v1
kind: Pod
metadata:
  name: pod-example
spec:
  nodeName: server4  指定hostname安装 
  containers:

  - name: myapp
    image: myapp:v1
    
  - name: busybox
    image: busyboxplus:latest
    tty: true
    stdin: true

上一篇:Nvidia GPU风扇和电源显示ERR!


下一篇:tomcat部署