K8s-Pod详解 配置

目录

一  pod配置

 二 基本配置

三 镜像拉取策略

四 启动命令

五  环境变量

六 端口设置

七 资源配额     


一  pod配置

[root@master ~]# kubectl explain pod.spec.containers
KIND:     Pod
VERSION:  v1
RESOURCE: containers <[]Object  ##数组 代表可以有多少个容器
FIELDS:
   args	<[]string>  ##容器启动该命令需要的参数列表
   command	<[]string> ##容器启动命令列表
   env	<[]Object> ##环境
   image	 ##镜像
   imagePullPolicy	##镜像策略
   ports	<[]Object>
   readinessProbe	
   resources	 ##资源限制和请求
   securityContext	
   startupProbe	
   volumeDevices	<[]Object>
   volumeMounts	<[]Object>
   workingDir	


 二 基本配置

 [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

特别说明:

  1.  command和arg均未写,那么用dockerfile配置
  2. 如果command,arg都未写,那么用dockerfile配置
  3. 如果command写了,但是args没写,那么daockerfile会被忽略。,执行command
  4. 如果command没写,但是args写了,那么dockerfile中配置的entryoint会被执行,使用args参数
  5. 如果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	 -required- #容器需要监听的端口
   hostIP	 ##外部端口绑定到主机ip 一般省略
   hostPort	##容器需要在主机公开的端口 如果设置,主机只能运行一个容器副本
   name	 ##端口名称 如果指定则 在pod具有唯一性
   protocol	 ##端口协议,默认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"

你可能感兴趣的:(k8s,kubernetes,java,docker)