pod(三):pod的管理
目录
- 一.系统环境
- 二.前言
- 三.pod的管理
- 3.1 环境介绍
- 3.2 管理pod
一.系统环境
服务器版本 | docker软件版本 | CPU架构 |
---|---|---|
CentOS Linux release 7.4.1708 (Core) | Docker version 20.10.12 | x86_64 |
二.前言
pod的常见管理。
管理pod的前提是已经有一套可以正常运行的Kubernetes集群,关于Kubernetes(k8s)集群的安装部署,可以查看博客《Centos7 安装部署Kubernetes(k8s)集群》Centos7 安装部署Kubernetes(k8s)集群 - 人生的哲理 - 博客园
三.pod的管理
3.1 环境介绍
Kubernetes集群架构:k8scloude1作为master节点,k8scloude2,k8scloude3作为worker节点
服务器 | 操作系统版本 | CPU架构 | 进程 | 功能描述 |
---|---|---|---|---|
k8scloude1/192.168.110.130 | CentOS Linux release 7.4.1708 (Core) | x86_64 | docker,kube-apiserver,etcd,kube-scheduler,kube-controller-manager,kubelet,kube-proxy,coredns,calico | k8s master节点 |
k8scloude2/192.168.110.129 | CentOS Linux release 7.4.1708 (Core) | x86_64 | docker,kubelet,kube-proxy,calico | k8s worker节点 |
k8scloude3/192.168.110.128 | CentOS Linux release 7.4.1708 (Core) | x86_64 | docker,kubelet,kube-proxy,calico | k8s worker节点 |
3.2 管理pod
使用Nginx镜像创建一个pod
[root@k8scloude1 pod]# vim nginx.yaml #kind: Pod表示资源类型为Pod labels指定pod标签 metadata下面的name指定pod名字 containers下面全是容器的定义
#image指定镜像名字 imagePullPolicy指定镜像下载策略 containers下面的name指定容器名
#resources指定容器资源(CPU,内存等) env指定容器里的环境变量 dnsPolicy指定DNS策略
#restartPolicy容器重启策略 ports指定容器端口
[root@k8scloude1 pod]# cat nginx.yaml
apiVersion: v1
kind: Pod
metadata:creationTimestamp: nulllabels:run: nginxname: nginx
spec:containers:- image: nginximagePullPolicy: IfNotPresentname: nginxresources: {}ports:- name: httpcontainerPort: 80protocol: TCPenv:- name: xxvalue: "12"- name: yyvalue: "21"- name: zzvalue: hellodnsPolicy: ClusterFirstrestartPolicy: Always
status: {}[root@k8scloude1 pod]# ls
nginx.yaml pod1.yaml pod2.yaml[root@k8scloude1 pod]# kubectl apply -f nginx.yaml
pod/nginx created[root@k8scloude1 pod]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 5s
不进入容器,执行ls / 命令
#不进入容器,执行命令:kubectl exec podname -- 命令
[root@k8scloude1 pod]# kubectl exec nginx -- ls /
bin
boot
dev
docker-entrypoint.d
docker-entrypoint.sh
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
进入容器执行命令
#进入容器:kubectl exec -it podname -- bash
[root@k8scloude1 pod]# kubectl exec -it nginx -- bash
root@nginx:/# which nginx
/usr/sbin/nginx
root@nginx:/# exit
exit
从物理机复制文件到pod里
[root@k8scloude1 pod]# kubectl cp /etc/hosts nginx:/tmp[root@k8scloude1 pod]# kubectl exec nginx -- ls /tmp
hosts
从pod里复制文件到物理机
[root@k8scloude1 pod]# kubectl cp nginx:/etc/hosts nginx_hosts
tar: Removing leading `/' from member names[root@k8scloude1 pod]# ls
nginx_hosts nginx.yaml pod1.yaml pod2.yaml[root@k8scloude1 pod]# cat nginx_hosts
# Kubernetes-managed hosts file.
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
fe00::0 ip6-mcastprefix
fe00::1 ip6-allnodes
fe00::2 ip6-allrouters
10.244.251.202 nginx[root@k8scloude1 pod]# rm -rf nginx_hosts
查看pod的日志
[root@k8scloude1 pod]# kubectl logs nginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2022/01/12 13:41:43 [notice] 1#1: using the "epoll" event method
2022/01/12 13:41:43 [notice] 1#1: nginx/1.21.5
2022/01/12 13:41:43 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
2022/01/12 13:41:43 [notice] 1#1: OS: Linux 3.10.0-693.el7.x86_64
2022/01/12 13:41:43 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2022/01/12 13:41:43 [notice] 1#1: start worker processes
2022/01/12 13:41:43 [notice] 1#1: start worker process 31
2022/01/12 13:41:43 [notice] 1#1: start worker process 32
当一个pod里有两个容器,怎么查看?kubectl exec -it podname -c 容器名 -- 命令
首先创建一个包含2个容器的pod
[root@k8scloude1 pod]# vim pod2.yaml [root@k8scloude1 pod]# cat pod2.yaml
apiVersion: v1
kind: Pod
metadata:creationTimestamp: nulllabels:run: pod1name: pod1
spec:containers:- image: nginximagePullPolicy: IfNotPresentname: n1resources: {}- image: nginximagePullPolicy: IfNotPresentcommand: ["sh","-c","sleep 10"]name: n2resources: {}dnsPolicy: ClusterFirstrestartPolicy: Always
status: {}[root@k8scloude1 pod]# kubectl apply -f pod2.yaml
pod/pod1 created[root@k8scloude1 pod]# kubectl get pod
NAME READY STATUS RESTARTS AGE
pod1 2/2 Running 0 6s
查看pod1的描述信息
[root@k8scloude1 pod]# kubectl describe pod pod1
Name: pod1
Namespace: pod
Priority: 0
Node: k8scloude2/192.168.110.129
Start Time: Wed, 12 Jan 2022 21:53:05 +0800
Labels: run=pod1
Annotations: cni.projectcalico.org/containerID: d103a6cb8e6535c5cfa8cf52153a80c11b75c0b7a744c7ad1028f3f4e88a627ecni.projectcalico.org/podIP: 10.244.112.141/32cni.projectcalico.org/podIPs: 10.244.112.141/32
Status: Running
IP: 10.244.112.141
IPs:IP: 10.244.112.141
Containers:n1:Container ID: docker://e54540c02e54109af7437fd00f18bcca3969e75eafb336dadb9ddb21022520edImage: nginxImage ID: docker-pullable://nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31Port: <none>Host Port: <none>State: RunningStarted: Wed, 12 Jan 2022 21:53:06 +0800Ready: TrueRestart Count: 0Environment: <none>Mounts:/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-42h2q (ro)n2:Container ID: docker://2d09c058d4c11f51c1c22c58012c79f5b8ec8327fcdd43e17f4533cb01f098d0Image: nginxImage ID: docker-pullable://nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31Port: <none>Host Port: <none>Command:sh-csleep 10State: TerminatedReason: CompletedExit Code: 0Started: Wed, 12 Jan 2022 21:53:39 +0800Finished: Wed, 12 Jan 2022 21:53:49 +0800Last State: TerminatedReason: CompletedExit Code: 0Started: Wed, 12 Jan 2022 21:53:17 +0800Finished: Wed, 12 Jan 2022 21:53:27 +0800Ready: FalseRestart Count: 2Environment: <none>Mounts:/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-42h2q (ro)
Conditions:Type StatusInitialized True Ready False ContainersReady False PodScheduled True
Volumes:kube-api-access-42h2q:Type: Projected (a volume that contains injected data from multiple sources)TokenExpirationSeconds: 3607ConfigMapName: kube-root-ca.crtConfigMapOptional: <nil>DownwardAPI: true
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300snode.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:Type Reason Age From Message---- ------ ---- ---- -------Normal Scheduled 46s default-scheduler Successfully assigned pod/pod1 to k8scloude2Normal Pulled 46s kubelet Container image "nginx" already present on machineNormal Created 46s kubelet Created container n1Normal Started 46s kubelet Started container n1Normal Pulled 13s (x3 over 46s) kubelet Container image "nginx" already present on machineNormal Created 13s (x3 over 46s) kubelet Created container n2Normal Started 13s (x3 over 46s) kubelet Started container n2Warning BackOff 3s (x2 over 24s) kubelet Back-off restarting failed container
查看pod里的n1容器的/tmp目录
#当一个pod里有两个容器,怎么查看:kubectl exec -it podname -c 容器名 -- 命令
[root@k8scloude1 pod]# kubectl exec -it pod1 -c n1 -- ls /tmp
查看pod里的n2容器的/tmp目录
[root@k8scloude1 pod]# kubectl exec -it pod1 -c n2 -- ls /tmp
进入pod1里的n1容器
[root@k8scloude1 pod]# kubectl exec -it pod1 -c n1 -- bash
root@pod1:/# which nginx
/usr/sbin/nginx
root@pod1:/# exit
exit
查看pod1里的n1容器日志
[root@k8scloude1 pod]# kubectl logs pod1 -c n1
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2022/01/12 13:53:06 [notice] 1#1: using the "epoll" event method
2022/01/12 13:53:06 [notice] 1#1: nginx/1.21.5
2022/01/12 13:53:06 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
2022/01/12 13:53:06 [notice] 1#1: OS: Linux 3.10.0-693.el7.x86_64
2022/01/12 13:53:06 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2022/01/12 13:53:06 [notice] 1#1: start worker processes
2022/01/12 13:53:06 [notice] 1#1: start worker process 32
2022/01/12 13:53:06 [notice] 1#1: start worker process 33
编辑pod: kubectl edit pod podname
[root@k8scloude1 pod]# kubectl edit pod nginx
Edit cancelled, no changes made.
容器里运行命令的一种写法是使用command
[root@k8scloude1 pod]# vim pod2.yaml [root@k8scloude1 pod]# cat pod2.yaml
apiVersion: v1
kind: Pod
metadata:creationTimestamp: nulllabels:run: pod1name: pod1
spec:containers:- image: nginximagePullPolicy: IfNotPresentname: n1resources: {}- image: nginximagePullPolicy: IfNotPresentcommand: ["sh","-c","sleep 10"]name: n2resources: {}dnsPolicy: ClusterFirstrestartPolicy: Always
status: {}
容器里运行命令的另一种写法是使用args
[root@k8scloude1 pod]# kubectl run podtest --image=nginx --dry-run=client -o yaml -- sh -c sleep 100
apiVersion: v1
kind: Pod
metadata:creationTimestamp: nulllabels:run: podtestname: podtest
spec:containers:- args:- sh- -c- sleep- "100"image: nginxname: podtestresources: {}dnsPolicy: ClusterFirstrestartPolicy: Always
status: {}
致力于一条龙式的为您解决问题
转载至https://www.cnblogs.com/renshengdezheli/p/16707021.html
pod(三):pod的管理相关推荐
- 深入kubernetes之Pod——一pod多容器
六.深入Pod--一pod多容器 一pod多容器,可以说是kube精华所在,让多个同应用的单一容器可以整合到一个类虚拟机中,使其所有容器共用一个vm的资源,提高耦合度,神来之笔,从而方便副本的复制,提 ...
- C++大法:举世闻名之BOOST大法精华浅析(三)内存管理库(小白piao分享)
文章目录 三.内存管理库 3.1 smart_ptr 3.1.1 RAII机制 3.1.2 智能指针 3.1.3 scoped_ptr 3.1.4 scoped_array 3.1.5 shared_ ...
- 【K8s】什么是Pod?Pod的调度与控制器
文章目录 一.Pod介绍 1.Pod结构 2.Pod的定义 二.Pod配置:spec.containers 1.基本配置 name和image 2.镜像拉取策略 imagePullpolicy 3.启 ...
- k8s创建pod - 启动pod的流程
目录 知识点一:启动一个pod 1.使用命令启动一个nginx pod 1.1.访问刚才创建的pod的nginx服务 1.2.删除deployment 2.将pod里的服务发布出去 首先创建根据yam ...
- 《Linux内核设计与实现》读书笔记 第三章 进程管理
第三章进程管理 进程是Unix操作系统抽象概念中最基本的一种.我们拥有操作系统就是为了运行用户程序,因此,进程管理就是所有操作系统的心脏所在. 3.1进程 概念: 进程:处于执行期的程序.但不仅局限于 ...
- Gradle for Android 第三篇( 依赖管理 )
Gradle for Android 第三篇( 依赖管理 ) 依赖管理是Gradle最闪耀的地方,最好的情景是,你仅仅只需添加一行代码在你的build文件,Gradle会自动从远程仓库为你下载相关的j ...
- 操作系统第三章-内存管理
写在前面:本文参考王道论坛的 操作系统考研复习指导单科书 下面的流程图很重要. 加入快表的基本分页 加入快表的二级页表!! 虚拟存储器:请求分页的流程图. 文章目录 第三章 内存管理 3.1 内存管理 ...
- 操作系统:第三章 内存管理2 - 详解虚拟内存,页面置换算法,页面分配策略
本文已收录至 Github(MD-Notes),若博客中有图片打不开,可以来我的 Github 仓库:https://github.com/HanquanHq/MD-Notes,涵盖了互联网大厂面试必 ...
- 操作系统(三)内存管理
操作系统(三)内存管理 一.程序执行过程 装入的三种方式 链接的三种方式 二.内存管理的概念 内存空间的分配与回收 连续分配管理方式 单一连续分配 固定分区分配 动态分区分配 首次适应算法 最佳适应算 ...
最新文章
- MATLAB读取文本文件----textread
- python实现画图哆啦A梦
- android studio配置java_android studio配置Javah 和ndk-build
- sql server 分页
- c语言将字符串按空格分割_字符串单词输入反向输出怎么搞?C语言又带着二维数组来了!...
- 机器学习概念 —— 样本距离矩阵
- Java基本数据类型总结(转)
- HTML5七夕情人节表白网页制作【蓝色3D动态相册】HTML+CSS+JavaScript 程序员表白3D相册代码 html生日快乐祝福网页制作
- Raisecom 交换机防止ARP欺骗攻击及防止多个DHCP服务器方法
- sql查询每科成绩最高的人和分数
- opencv与darknet在python2.7下报错问题
- texstudio设置暗黑主题
- 长尾关键词排名优化技巧
- 远程主机强迫关闭一个现有连接-=-解决办法
- 微信昵称乱码 mysql_微信昵称乱码及mysql编码格式设立(utf8mb4)_mysql
- win10无线网卡(该设备无法启动,代码10)
- Windows 10/11 官方下载工具 镜像制作U盘启动盘 快速安装
- 点成方案| 麦氏比浊仪用于微生物检验
- 我的世界服务器怎么发全部消息,我的世界服务器指令
- 2019年十大开源WEB应用防火墙点评