目录
一 pod配置
[root@master ~]# kubectl explain pod.spec.containers KIND: Pod VERSION: v1 RESOURCE: containers <[]Object ##数组 代表可以有多少个容器 FIELDS: args <[]string> ##容器启动该命令需要的参数列表 command <[]string> ##容器启动命令列表 env <[]Object> ##环境 image <string> ##镜像 imagePullPolicy <string >##镜像策略 ports <[]Object> readinessProbe <Object> resources <Object> ##资源限制和请求 securityContext <Object> startupProbe <Object> volumeDevices <[]Object> volumeMounts <[]Object> workingDir <string>
二 基本配置
[root@master ~]# cat pod.base.yaml apiVersion: v1 kind: Pod metadata: name: nginxpod-v1 namespace: dev labels: version: "1" env: "test" spec: containers: - name: nginxpod-v1 image: nginx - name: busybox image: busybox ##默认使用docker的默认镜像仓库,现在是使用的阿里云docker仓库
[root@master ~]# kubectl get pods -n dev NAME READY STATUS RESTARTS AGE nginxpod-v1 1/2 NotReady 3 (44s ago) 111s ##实际是还有个busybox容器未启动 [root@master ~]# kubectl describe pods -n dev ##查看详细信息发现busybox一直在重启
三 镜像拉取策略
imagePullPolicy:用于设置镜像的拉取测率,k8s支持三种配置的拉取策略
- Always : 总是从远程仓库拉取镜像(若tag为lastest 则默认)
- ifNotPresent:本地有则使用本地镜像,本地没有则去远程(若tag有值,则默认)
- Never:只使用本地镜像
四 启动命令
command: ["/bin/sh","-c","touch /tmp/1.tx;while true;do /bin/echo $(date + %T)>> /tmp/1.tx;sleep3; done;"]
- /bin/sh -c 使用sh执行命令
- touch创建文件 while是循环写入
#添加后发现两个pod都运行了 [root@master ~]# kubectl create -f pod.base.yaml pod/nginxpod-v2 created [root@master ~]# kubectl get pods -n dev NAME READY STATUS RESTARTS AGE nginxpod-v1 1/2 CrashLoopBackOff 53 (53s ago) 4h12m nginxpod-v2 2/2 Running 0 45s
##kubectl exec pod名称 -n 命名空间 -it -c 容器 /bin/sh [root@master ~]# kubectl exec nginxpod-v2 -n dev -it -c busybox /bin/sh
特别说明:
- command和arg均未写,那么用dockerfile配置
- 如果command,arg都未写,那么用dockerfile配置
- 如果command写了,但是args没写,那么daockerfile会被忽略。,执行command
- 如果command没写,但是args写了,那么dockerfile中配置的entryoint会被执行,使用args参数
- 如果command和args都写了,那么dockerfile的配置被忽略,执行command追加args参数
五 环境变量
spec: containers: - name: nginxpod-v1 image: nginx:1 - name: busybox image: busybox command: ["/bin/sh","-c","touch /tmp/1.txt;while true;do /bin/echo $(date + %T)>> /tmp/1.txt; sleep 3; done;"] env: - name: "username" value: "admin" - name: "HOSTNAME" value: "slurmmaster"
#执行上述操作 进入容器查看 [root@master ~]# kubectl exec nginxpod-v2 -n dev -it -c busybox /bin/sh kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead. / # ls bin dev etc home proc root sys tmp usr var / # echo $username admin ##不推荐使用
六 端口设置
[root@master ~]# kubectl explain pod.spec.containers.ports KIND: Pod VERSION: v1 RESOURCE: ports <[]Object> FIELDS: containerPort <integer> -required- #容器需要监听的端口 hostIP <string> ##外部端口绑定到主机ip 一般省略 hostPort <integer>##容器需要在主机公开的端口 如果设置,主机只能运行一个容器副本 name <string> ##端口名称 如果指定则 在pod具有唯一性 protocol <string> ##端口协议,默认tcp
apiVersion: v1 kind: Pod metadata: name: nginxpod-v2 namespace: dev labels: version: "1" env: "test" spec: containers: - name: nginxpod-v2 image: nginx:1 ports: - name: nginx-port containerPort: 80
访问容器中的程序需要使用的是podip;contalnerport端口
七 资源配额
容器的程序需要运行,肯定是要占用一部分资源的,比如cpu和内存等等,不对容器进行限制,那么他就可能吃掉大量的资源导致其他无法运行,k8s主要是通过resources选项来实现
- limits:用于限制容器最大资源,超过会被终止,并重启
- requests:用于容器需要最小的资源,如果环境资源不够,无法启动
apiVersion: v1 kind: Pod metadata: name: resources namespace: dev labels: version: "1" env: "test" spec: containers: - name: nginx image: nginx:1 ports: - name: nginx-port containerPort: 80 resources: limits: cpu: "1" memory: "1G"
//创建pod
[root@master ~]# kubectl create -f pod.base.yaml
//查看限制
[root@master ~]# kubectl get pod resources -n dev -o yaml | grep 1
memory: 1G
cpu: "1"