020.掌握Pod-Pod基础使用
一 Pod定义详解
1.1 完整Pod定义文件
1 apiVersion: v1 #必选,版本号,例如v1,版本号必须可以用 kubectl api-versions 查询到
2 kind: Pod #必选,Pod
3 metadata: #必选,元数据
4 name: string #必选,Pod名称,需符合RFC 1035规范
5 namespace: string #必选,Pod所属的命名空间,默认为"default"
6 labels: #自定义标签
7 - name: string #自定义标签名字
8 annotations: #自定义注释列表
9 - name: string
10 spec: #必选,Pod中容器的详细定义
11 containers: #必选,Pod中容器列表
12 - name: string #必选,容器名称,需符合RFC 1035规范
13 image: string #必选,容器的镜像名称
14 imagePullPolicy: [ Always|Never|IfNotPresent ] #获取镜像的策略,Alawys表示每次都尝试下载镜像,IfnotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像
15 command: [string] #容器的启动命令列表,如不指定,使用打包时使用的启动命令
16 args: [string] #容器的启动命令参数列表
17 workingDir: string #容器的工作目录
18 volumeMounts: #挂载到容器内部的存储卷配置
19 - name: string #引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名
20 mountPath: string #存储卷在容器内mount的绝对路径,应少于512字符
21 readOnly: boolean #是否为只读模式,默认为读写模式
22 ports: #需要暴露的端口库号列表
23 - name: string #端口的名称
24 containerPort: int #容器需要监听的端口号
25 hostPort: int #容器所在主机需要监听的端口号,默认与Container相同
26 protocol: string #端口协议,支持TCP和UDP,默认TCP
27 env: #容器运行前需设置的环境变量列表
28 - name: string #环境变量名称
29 value: string #环境变量的值
30 resources: #资源限制和请求的设置
31 limits: #资源限制的设置
32 cpu: string #CPU的限制,单位为core数,将用于docker run --cpu-shares参数
33 memory: string #内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
34 requests: #资源请求的设置
35 cpu: string #CPU请求,容器启动的初始可用数量
36 memory: string #内存请求,容器启动的初始可用数量
37 livenessProbe: #对Pod内各容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种方法即可
38 exec: #对Pod容器内检查方式设置为exec方式
39 command: [string] #exec方式需要制定的命令或脚本
40 httpGet: #对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、port
41 path: string
42 port: number
43 host: string
44 scheme: string
45 HttpHeaders:
46 - name: string
47 value: string
48 tcpSocket: #对Pod内个容器健康检查方式设置为tcpSocket方式
49 port: number
50 initialDelaySeconds: 0 #容器启动完成后首次探测的时间,单位为秒
51 timeoutSeconds: 0 #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒
52 periodSeconds: 0 #对容器监控检查的定期探测时间设置,单位秒,默认10秒一次
53 successThreshold: 0
54 failureThreshold: 0
55 securityContext:
56 privileged: false
57 restartPolicy: [Always | Never | OnFailure] #Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该Pod
58 nodeSelector: obeject #设置NodeSelector表示将该Pod调度到包含这个label的node上,以key:value的格式指定
59 imagePullSecrets: #Pull镜像时使用的secret名称,以key:secretkey格式指定
60 - name: string
61 hostNetwork: false #是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
62 volumes: #在该pod上定义共享存储卷列表
63 - name: string #共享存储卷名称 (volumes类型有很多种)
64 emptyDir: {} #类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值
65 hostPath: string #类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录
66 path: string #Pod所在宿主机的目录,将被用于同期中mount的目录
67 secret: #类型为secret的存储卷,挂载集群与定义的secre对象到容器内部
68 scretname: string
69 items:
70 - key: string
71 path: string
72 configMap: #类型为configMap的存储卷,挂载预定义的configMap对象到容器内部
73 name: string
74 items:
75 - key: string
76 path: string
二 Pod的基本用法
2.1 创建Pod
1 [root@k8smaster01 study]# vi frontend-localredis-pod.yaml
2 apiVersion: v1
3 kind: Pod
4 metadata:
5 name: redis-php
6 label:
7 name: redis-php
8 spec:
9 containers:
10 - name: frontend
11 image: kubeguide/guestbook-php-frontend:localredis
12 ports:
13 - containersPort: 80
14 - name: redis-php
15 image: kubeguide/redis-master
16 ports:
17 - containersPort: 6379
18
19 [root@k8smaster01 study]# kubectl create -f frontend-localredis-pod.yaml
20
2.2 查看Pod
1 [root@k8smaster01 study]# kubectl get pods #READY为2/2,表示此Pod中运行了yaml定义的两个容器
2 NAME READY STATUS RESTARTS AGE
3 redis-php 2/2 Running 0 7m45s
4 [root@k8smaster01 study]# kubectl describe pod redis-php #查看详细信息
5
三 静态Pod
3.1 静态Pod概述
3.2 配置文件方式创建
1 [root@k8snode01 ~]# mkdir -p /etc/kubelet.d
2 [root@k8snode01 ~]# vi /etc/kubelet.d/static-web.yaml
3 apiVersion: v1
4 kind: Pod
5 metadata:
6 name: static-web
7 label:
8 name: static-web
9 spec:
10 containers:
11 - name: static-web
12 image: nginx
13 ports:
14 - name: web
15 containersPort: 80
16
17 [root@k8snode01 ~]# vi /etc/systemd/system/kubelet.service
18 ……
19 --config=/etc/kubelet.d/ \· #加入此参数
20 ……
21 [root@k8snode01 ~]# systemctl daemon-reload
22 [root@k8snode01 ~]# systemctl restart kubelet.service #重启kubelet
23 [root@k8snode01 ~]# docker ps #查看创建的pod
3.3 HTTP方式
四 Pod容器共享Volume
4.1 共享Volume
1 [root@k8smaster01 study]# vi pod-volume-applogs.yaml
2 apiVersion: v1
3 kind: Pod
4 metadata:
5 name: volume-pod
6 spec:
7 containers:
8 - name: tomcat
9 image: tomcat
10 ports:
11 - containerPort: 8080
12 volumeMounts:
13 - name: app-logs
14 mountPath: /usr/local/tomcat/logs
15 - name: logreader
16 image: busybox
17 command: ["sh","-c","tail -f /logs/catalina*.log"]
18 volumeMounts:
19 - name: app-logs
20 mountPath: /logs
21 volumes:
22 - name: app-logs
23 emptyDir: {}
1 [root@k8smaster01 study]# kubectl create -f pod-volume-applogs.yaml #创建
2 [root@k8smaster01 study]# kubectl get pods #查看
3 [root@k8smaster01 study]# kubectl logs volume-pod -c busybox #读取log
1 [root@k8smaster01 study]# kubectl exec -it volume-pod -c tomcat -- ls /usr/local/tomcat/logs
2 catalina.2019-06-29.log localhost_access_log.2019-06-29.txt
3 host-manager.2019-06-29.log manager.2019-06-29.log
4 localhost.2019-06-29.log
5 [root@k8smaster01 study]# kubectl exec -it volume-pod -c tomcat -- tail /usr/local/tomcat/logs/catalina.2019-06-29.log
五 Pod配置管理
5.1 Pod配置概述
5.2 ConfigMap概述
- 生成容器内部的环境变量;
- 设置容器的启动命令的参数(需设置为环境变量);
- 以volume的形式挂载为容器内部的文件或者目录。
5.3 创建ConfigMap资源对象——yaml方式
1 [root@k8smaster01 study]# vi cm-appvars.yaml
2 apiVersion: v1
3 kind: ConfigMap
4 metadata:
5 name: cm-appvars
6 data:
7 apploglevel: info
8 appdatadir: /var/data
9
10 [root@k8smaster01 study]# kubectl create -f cm-appvars.yaml
11 configmap/cm-appvars created
12 [root@k8smaster01 study]# kubectl get configmaps
13 NAME DATA AGE
14 cm-appvars 2 8s
15 [root@k8smaster01 study]# kubectl describe configmaps cm-appvars
1 [root@k8smaster01 study]# kubectl get configmaps cm-appvars -o yaml
5.4 创建ConfigMap资源对象——命令行方式
1 # kubectl create configmap NAME --from-file=[key=]source --from-file=[key=]source
1 # kubectl create configmap NAME --from-file=config-files-dir
1 # kubectl create configmap NAME --from-literal=key1=value1 --from-literal=key2=value2
5.5 Pod使用ConfigMap
- 通过环境变量获取ConfigMap中的内容;
- 通过Volume挂载的方式将ConfigMap中的内容挂载为容器内容的文件或目录。
1 [root@k8smaster01 study]# vi cm-test-pod.yaml
2 apiVersion: v1
3 kind: Pod
4 metadata:
5 name: cm-test-pod
6 spec:
7 containers:
8 - name: cm-test
9 image: busybox
10 command: ["/bin/sh","-c","env|grep APP"] #容器里执行查看环境变量的命令
11 env:
12 - name: APPLOGLEVEL #定义容器环境变量名称
13 valueFrom:
14 configMapKeyRef: #环境变量的值来自ConfigMap
15 name: cm-appvars #指定来自cm-appvars的ConfigMap
16 key: apploglevel #key为apploglevel
17 - name: APPDATADIR
18 valueFrom:
19 configMapKeyRef:
20 name: cm-appvars
21 key: appdatadir
22
23 [root@k8smaster01 study]# kubectl create -f cm-test-pod.yaml
24 [root@k8smaster01 study]# kubectl get pods
25 NAME READY STATUS RESTARTS AGE
26 cm-test-pod 0/1 Completed 2 24s
5.6 ConfigMap限制
- Configmap必须在pod创建之间创建;
- ConfigMap受到namespace的限制,只有同一个命名空间下才能引用;
- ConfigMap暂时无法配置配额;
- 静态的pod无法使用ConfigMap;
- 在使用volumeMount挂载的时候,configMap基于items创建的文件会整体的将挂载数据卷的容器的目录下的文件全部覆盖。
六 Pod获取自身信息
6.1 Downward API
- 环境变量:用于单个变量,可以将pod信息和container信息注入容器内部;
- volume挂载:将数组类信息生成为文件,挂载至容器内部。
1 [root@k8smaster01 study]# vi dapi-test-pod.yaml
2 apiVersion: v1
3 kind: Pod
4 metadata:
5 name: dapi-test-pod
6 spec:
7 containers:
8 - name: test-container
9 image: busybox
10 command: [ "/bin/sh", "-c", "env" ]
11 env:
12 - name: MY_POD_NAME
13 valueFrom:
14 fieldRef:
15 fieldPath: metadata.name
16 - name: MY_POD_NAMESPACE
17 valueFrom:
18 fieldRef:
19 fieldPath: metadata.namespace
20 - name: MY_POD_IP
21 valueFrom:
22 fieldRef:
23 fieldPath: status.podIP
24 restartPolicy: Never
1 [root@k8smaster01 study]# kubectl create -f dapi-test-pod.yaml
2 [root@k8smaster01 study]# kubectl logs dapi-test-pod | grep MY_POD
3 MY_POD_NAMESPACE=default
4 MY_POD_IP=172.30.240.4
5 MY_POD_NAME=dapi-test-pod
6
1 [root@k8smaster01 study]# vi dapi-test-pod-container-vars.yaml
2 apiVersion: v1
3 kind: Pod
4 metadata:
5 name: dapi-test-pod-container-vars
6 spec:
7 containers:
8 - name: test-container
9 image: busybox
10 imagePullPolicy: Never
11 command: [ "/bin/sh", "-c" ]
12 args:
13 - while true; do
14 echo -en '\n';
15 printenv MY_CPU_REQUEST MY_CPU_LIMIT;
16 printenv MY_MEM_REQUEST MY_MEM_LIMIT;
17 sleep 3600;
18 done;
19 resources:
20 requests:
21 memory: "32Mi"
22 cpu: "125m"
23 limits:
24 memory: "64Mi"
25 cpu: "250m"
26 env:
27 - name: MY_CPU_REQUEST
28 valueFrom:
29 resourceFieldRef:
30 containerName: test-container
31 resource: requests.cpu
32 - name: MY_CPU_LIMIT
33 valueFrom:
34 resourceFieldRef:
35 containerName: test-container
36 resource: limits.cpu
37 - name: MY_MEM_REQUEST
38 valueFrom:
39 resourceFieldRef:
40 containerName: test-container
41 resource: requests.memory
42 - name: MY_MEM_LIMIT
43 valueFrom:
44 resourceFieldRef:
45 containerName: test-container
46 resource: limits.memory
47 restartPolicy: Never
1 [root@k8smaster01 study]# kubectl create -f dapi-test-pod-container-vars.yaml
2 [root@k8smaster01 study]# kubectl logs dapi-test-pod-container-vars
3 1
4 1
5 33554432
6 67108864
1 [root@k8smaster01 study]# vi dapi-test-pod-volume.yaml
2 apiVersion: v1
3 kind: Pod
4 metadata:
5 name: dapi-test-pod-volume
6 labels:
7 zone: us-est-coast
8 cluster: test-cluster1
9 rack: rack-22
10 annotations:
11 build: two
12 builder: john-doe
13 spec:
14 containers:
15 - name: test-container
16 image: busybox
17 imagePullPolicy: Never
18 command: [ "/bin/sh", "-c" ]
19 args:
20 - while true; do
21 if [[ -e /etc/labels ]]; then
22 echo -en '\n\n'; cat /etc/labels; fi;
23 if [[ -e /etc/annotations ]]; then
24 echo -en '\n\n'; cat /etc/annotations; fi;
25 sleep 3600;
26 done;
27 volumeMounts:
28 - name: podinfo
29 mountPath: /etc
30 readOnly: false
31 volumes:
32 - name: podinfo
33 downwardAPI:
34 items:
35 - path: "labels"
36 fieldRef:
37 fieldPath: metadata.labels
38 - path: "annotations"
39 fieldRef:
40 fieldPath: metadata.annotations
1 [root@k8smaster01 study]# kubectl create -f dapi-test-pod-volume.yaml
2 [root@k8smaster01 study]# kubectl logs dapi-test-pod-volume
3
020.掌握Pod-Pod基础使用的更多相关文章
- 020 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 14 变量与常量 知识总结
020 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 14 变量与常量 知识总结 本文知识点:变量与常量 知识总结 Java中的标识符 Java中的关键字 目前常 ...
- k8s之Pod基础概念
1. 资源限制 Pod是kubernetes中最小的资源管理组件,Pod也是最小化运行容器化应用的资源对象.一个Pod代表着集群中运行的一个进程.kubernetes中其他大多数组件都是围绕着Pod来 ...
- Kubernetes之POD
什么是Pod Pod是可以创建和管理Kubernetes计算的最小可部署单元.一个Pod代表着集群中运行的一个进程. Pod就像是豌豆荚一样,它由一个或者多个容器组成(例如Docker容器),它们共享 ...
- k8s如何管理Pod(rc、rs、deployment)
是豆荚,可以把容器想像成豆荚里的豆子,把一个或多个关系紧密的豆子包在一起就是豆荚(一个Pod).在k8s中我们不会直接操作容器,而是把容器包装成Pod再进行管理(关于Pod,大家可以参考第十期的分享“ ...
- Kubernetes对象之Pod
系列目录 Pod是Kubernetes调度的最小单元.一个Pod可以包含一个或多个容器,因此它可以被看作是内部容器的逻辑宿主机.Pod的设计理念是为了支持多个容器在一个Pod中共享网络和文件系统 因此 ...
- kubernetes之多容器pod以及通信
系列目录 容器经常是为了解决单一的,窄范围的问题,比如说微服务.然而现实中,一些复杂问题的完成往往需要多个容器.这里我们讨论一下如何把多个容器放在同一个pod里以及容器间的通信 什么是pod pod是 ...
- k8s创建pod和service的过程
一.概念介绍 更详细的参见:https://www.kubernetes.org.cn/5335.html 1.K8s K8s 是一种用于在一组主机上运行和协同容器化应用程序的系统,提供应用部署.规划 ...
- (五)Kubernetes Pod状态和生命周期管理
什么是Pod Pod是kubernetes中你可以创建和部署的最小也是最简的单位.Pod代表着集群中运行的进程. Pod中封装着应用的容器(有的情况下是好几个容器),存储.独立的网络IP,管理容器如何 ...
- 深入掌握K8S Pod
k8s系列文章: 什么是K8S K8S configmap介绍 Pod是k8s中最小的调度单元,包含了一个"根容器"和其它用户业务容器. 如果你使用过k8s的话,当然会了解pod的 ...
- Kubernetes笔记(五):了解Pod(容器组)
Kubernetes 中, 容器总是以 Pod(容器组)的方式进行调度与运行.因此对 Pod 的理解与掌握是学习 Kubernetes 的基础. 理解 Pod Pod(容器组)是 Kubernetes ...
随机推荐
- ThinkPHP5 远程命令执行漏洞分析
本文首发自安全脉搏,转载请注明出处. 前言 ThinkPHP官方最近修复了一个严重的远程代码执行漏洞.这个主要漏洞原因是由于框架对控制器名没有进行足够的校验导致在没有开启强制路由的情况下可以构造恶意语 ...
- Express框架的整体感知
Express是基于node.js平台的快速.开放.极简的web开放框架,它的地位与作用有点类似于前端的jquery框架.它的英文官网地址为 http://expressjs.com,其对应的中文官网 ...
- Spring Boot项目如何同时支持HTTP和HTTPS协议
如今,企业级应用程序的常见场景是同时支持HTTP和HTTPS两种协议,这篇文章考虑如何让Spring Boot应用程序同时支持HTTP和HTTPS两种协议. 准备 为了使用HTTPS连接器,需要生成一 ...
- git 拉取指定的远程分支(三种方式)
直接拉取 git clone -b ants git@github.com:Ants-double/CareerJava.git git clone -b 远程分支名 仓库地址 本地已经有相关的仓库代 ...
- solr学习篇(二) solr 分词器篇
关于solr7.4搭建与配置可以参考 solr7.4 安装配置篇 在这里我们探讨一下分词的配置 目录 关于分词 配置分词 验证成功 1.关于分词 1.分词是指将一个中文词语拆成若干个词,提供搜索引擎 ...
- day27作业
FTP需求 客户端可以注册登录 client:输入一个login sever:执行login 客户端登陆后可以选择文件夹上传与下载 client:输入一个upload,download sever:执 ...
- python pyinstaller 打包exe报错
今天用python 使用pyinstaller打包exe出现错误 环境pyqt5 + python3.6 在导入pyqt5包之前加上如下代码 import sysimport osif hasattr ...
- 基于redis解决session分布式一致性问题
1.session是什么 当用户在前端发起请求时,服务器会为当前用户建立一个session,服务器将sessionId回写给客户端,只要用户浏览器不关闭,再次请求服务器时,将sessionId传给服务 ...
- Dockerfile 指令详解
GitHub Page:https://blog.cloudli.top/posts/Dockerfile-指令详解/ FROM FROM 命令指定基础镜像.在构建镜像时,基础镜像必须指定,因此在 D ...
- Java8系列 (五) Optional类
概述 在Java8之前, 如果需要对一个变量做一次 null 检查, 通常会像下面这样写 T t = service1.query(); if (t != null) { K k = service2 ...