清单介绍

在k8s中,一般使用yaml格式的文件来创建我们期望产生的pod,该yaml文件称为资源清单,可以减少命令行的使用,减少错误,可重复性好,可以规范化部署。

apiVersion: group/version :指明api资源属于哪个群组和版本,同一个组可以有多个版本

kubespray 部署arm和x86环境 kubectl api-versions_容器


kubectl api-versions :查询版本命令

kubespray 部署arm和x86环境 kubectl api-versions_容器_02


kubespray 部署arm和x86环境 kubectl api-versions_Pod_03


查看pod所有参数,带有required是必须存在的参数

kubespray 部署arm和x86环境 kubectl api-versions_docker_04


kubespray 部署arm和x86环境 kubectl api-versions_Pod_05


生成了一个清单

kubespray 部署arm和x86环境 kubectl api-versions_群组_06

apiVersion: v1		%指明api资源属于哪个群组和版本,同一个组可以有多个版本
kind: Pod			%标记创建的资源类型,k8s主要支持以下资源类别(Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Cronjob)
metadata:			%元数据
  name: pod-example	%对象名称
spec:				%定义目标资源的期望状态
  containers:
  - name: myapp		%容器名字
    image: myapp:v1	%指定镜像

使用清单

1.自主式Pod资源清单

镜像拉取策略

kubespray 部署arm和x86环境 kubectl api-versions_群组_07


指定容器启动命令

kubespray 部署arm和x86环境 kubectl api-versions_Pod_08


kubespray 部署arm和x86环境 kubectl api-versions_docker_09


查看详细信息

kubespray 部署arm和x86环境 kubectl api-versions_Pod_10


查看日志

kubespray 部署arm和x86环境 kubectl api-versions_kubernetes_11


查看合适的参数,stdin tty

kubespray 部署arm和x86环境 kubectl api-versions_docker_12


进入交互式

kubespray 部署arm和x86环境 kubectl api-versions_kubernetes_13


kubespray 部署arm和x86环境 kubectl api-versions_Pod_14


kubespray 部署arm和x86环境 kubectl api-versions_docker_15


进入busybox终端,-c 指定容器 ;-i 打开输入端口 ;-t 打开伪终端;

kubespray 部署arm和x86环境 kubectl api-versions_docker_16


终端内访问localhost,看到的是pod中其他容器的发布页面nginx,这是因为pod中所有的副本共享一个ip

kubespray 部署arm和x86环境 kubectl api-versions_群组_17


定义镜像拉取策略,有Always、Never、IfNotPresent三个值可选:

(1)Always:意思是每次都尝试重新拉取镜像;

(2)Never:表示仅适用本地镜像,本地有则使用本地镜像,不拉取;

(3)IfNotPresent:如果本地有镜像就使用本地镜像,没有就拉取在线镜像。

上面三个值都没设置的话,默认是Always。

2.设定监听端口

kubespray 部署arm和x86环境 kubectl api-versions_群组_18


端口冲突

kubespray 部署arm和x86环境 kubectl api-versions_Pod_19


kubespray 部署arm和x86环境 kubectl api-versions_群组_20


ports: 指定容器所在主机需要监听的端口号,会写到iptables策略中

  • containerPort: 80
    hostPort: 80 利用NAT把物理机的80端口映射到容器的80端口


    因为在server2上有端口映射,所以外部主机只能访问server2,server1和3不行

3.使用清单锁定IP

hostNetwork: true :锁定pod为与主机共用ip,使用宿主机网络,读取应用资源清单重新创建pod

kubespray 部署arm和x86环境 kubectl api-versions_docker_21


查看Pod信息可以看到pod的ip为其运行节点主机(server2)的ip;

(设置了hostNetwork值为true将无法在同一台宿主机上启动该容器的第二个副本)

kubespray 部署arm和x86环境 kubectl api-versions_docker_22


直接在机器上监听80

kubespray 部署arm和x86环境 kubectl api-versions_容器_23

4.限制CPU和内存

删除由资源清单生成的pod节点,继续修改文件,限制内存和cpu使用量,requests为最低限制,limit为最高限制

kubespray 部署arm和x86环境 kubectl api-versions_docker_24


可以看到限制cpu和内存的信息

kubespray 部署arm和x86环境 kubectl api-versions_kubernetes_25


server2有两个CPU,但是现在设置为3个

kubespray 部署arm和x86环境 kubectl api-versions_群组_26


kubespray 部署arm和x86环境 kubectl api-versions_Pod_27


kubespray 部署arm和x86环境 kubectl api-versions_kubernetes_28


一直是Pending,就会有问题

kubespray 部署arm和x86环境 kubectl api-versions_docker_29

锁定pod节点

kubespray 部署arm和x86环境 kubectl api-versions_Pod_30


kubespray 部署arm和x86环境 kubectl api-versions_群组_31

添加标签

kubespray 部署arm和x86环境 kubectl api-versions_群组_32


因为没有一个节点有标签,所以处于pending

kubespray 部署arm和x86环境 kubectl api-versions_Pod_33


加个标签就可以

kubespray 部署arm和x86环境 kubectl api-versions_kubernetes_34


kubespray 部署arm和x86环境 kubectl api-versions_docker_35


kubespray 部署arm和x86环境 kubectl api-versions_Pod_36


现在server2和server3都加上标签,被负载均衡了

如果一个节点有问题,会自动均衡到其他有标签的节点删除标签

kubespray 部署arm和x86环境 kubectl api-versions_docker_37