快速创建一个pod
[root@k8s-master ~]# kubectl run --help
Create and run a particular image in a pod.
Examples:
# Start a nginx pod.
kubectl run nginx --image=nginx
# Start a hazelcast pod and let the container expose port 5701.
kubectl run hazelcast --image=hazelcast/hazelcast --port=5701
# Start a hazelcast pod and set environment variables "DNS_DOMAIN=cluster" and "POD_NAMESPACE=default" in the
container.
kubectl run hazelcast --image=hazelcast/hazelcast --env="DNS_DOMAIN=cluster" --env="POD_NAMESPACE=default"
# Start a hazelcast pod and set labels "app=hazelcast" and "env=prod" in the container.
kubectl run hazelcast --image=hazelcast/hazelcast --labels="app=hazelcast,env=prod"
# Dry run. Print the corresponding API objects without creating them.
kubectl run nginx --image=nginx --dry-run=client
# Start a nginx pod, but overload the spec with a partial set of values parsed from JSON.
kubectl run nginx --image=nginx --overrides='{ "apiVersion": "v1", "spec": { ... } }'
# Start a busybox pod and keep it in the foreground, don't restart it if it exits.
kubectl run -i -t busybox --image=busybox --restart=Never
# Start the nginx pod using the default command, but use custom arguments (arg1 .. argN) for that command.
kubectl run nginx --image=nginx -- <arg1> <arg2> ... <argN>
# Start the nginx pod using a different command and custom arguments.
kubectl run nginx --image=nginx --command -- <cmd> <arg1> ... <argN>
创建一个pod:
kubectl run nginx-deploy --image=nginx:1.14-alpine ---port=80
查看是否创建成功:
[root@k8s-master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deploy 1/1 Running 0 100s 10.244.2.21 k8s-node2 <none> <none>
删除pod:
kubectl delete pod nginx-deploy
使用命令创建一个deploy
kubectl create deploy nginx-deploy --image=nginx:1.14-alpine
k8s的资源类别:
资源类型:
workload:pod,ReplicaSet,deployment,statefulSet,DaemonSet,Joob,CronJob
服务发现及均衡:
Services,Ingress
配置与存储:
Volume CSI
特殊类型存储卷: configmap,secret,DownwardAPI
集群级别资源:
Namespace,Node,Role,ClusterRole,RoleBinding,ClusterRoleBinding
元数据类型资源:
HPA,PodTemplate,LimitRange
创建资源的方法:
apiserver仅接收JSON格式的资源定义,如果用yaml格式提供的配置清单,apiserver可自动将其转为json格式,然后在提交,大部分资源的配置清单都有五个一级字段组成
apiVersion:指明我们创建的资源是属于哪个api群组及其版本( kubectl api-versions查看)
kind:资源类别 (标记打算创建一个什么资源,不能随意定义一般都是内键的)
metadate:元数据(主要是提供一下几个字段)
name:(在同一类别中这个那么必须是唯一的)
namespace:(名称空间)
labels:(标签)
annotations:(注解)
spec:(此字段是最重要的 ,定义用户期望的状态)
status:当前状态,此字段是由kubernetes集群维护
以上字段格式说明都可以在集群中查看:kubectl explain pods
比如想要查看metadata的二级字段怎么定义:kubectl explain pods.metadata
labels <map[string]string> (像这种map类型的是映射,由键值组成的映射,是另外一种json格式的数组,不是一个列表是众多kv组成的数据)
finalizers <[]string> (这种前面有中括号的一般都是字符串列表,就是字符串类型的数组)
ownerReferences <[]Object>(这种就是对象列表里面可以嵌套很多三级字段)
containers <[]Object> -required- (像这种对象列表后面有required是必选字段)
[root@k8s-master daem]# cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp
namespace: default
labels:
app: myapp
tier: frnotend
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
imagePullPolicy: IfNotPresent
- name: busybox
image: busybox:latest
command:
- "/bin/sh"
- "-c"
- "sleep 3600"
查看状态
[root@k8s-master daem]# kubectl get pods
NAME READY STATUS RESTARTS AGE
myapp 2/2 Running 0 13m
定义pod时在spec中的常用字段
spec.containers
- name <string> -required- (pod内嵌的容器名称)
image <string> (启动内嵌容器使用的镜像仓库地址,)
imagePullPolicy <string>
Always (总是到仓库中去下载,本地仓库中有或者没有都去仓库中下载)
Never (如果有镜像就用,没有也不去下载,需要用户手动去下载镜像)
IfNotPresent (如果本地有镜像就使用没有就去下载)
如果你的镜像标签是latest的默认就是Always,如果是其他的就使用IfNotPresent,一旦镜像创建过后这个字段的值是不能更改的,
ports <[]Object> (定义容器内部的要暴露端口号,协议)-
name <string> (名称)
containerPort <integer> -required- (容器的端口)
protocol <string> (协议,不指定默认是TCP)
修改镜像中的默认应用:
command <[]string>
args <[]string>
如果要覆盖默认的 Entrypoint 与 Cmd,需要遵循如下规则:
如果在容器配置中没有设置 command 或者 args,那么将使用 Docker 镜像自带的命令及其参数。
如果在容器配置中只设置了 command 但是没有设置 args,那么容器启动时只会执行该命令, Docker 镜像中自带的命令及其参数会被忽略。
如果在容器配置中只设置了 args,那么 Docker 镜像中自带的命令会使用该新参数作为其执行时的参数。
如果在容器配置中同时设置了 command 与 args,那么 Docker 镜像中自带的命令及其参数会被忽略。 容器启动时只会执行配置中设置的命令,并使用配置中设置的参数作为命令的参数。
示例:
-
Dod中的常用字段
apiVersion: v1 #必选,版本号,例如v1,版本号必须可以用 kubectl api-versions 查询到 .
kind: Pod #必选,Pod
metadata: #必选,元数据
name: string #必选,Pod名称
namespace: string #必选,Pod所属的命名空间,默认为"default"
labels: #自定义标签
- name: string #自定义标签名字
annotations: #自定义注释列表
- name: string
spec: #必选,Pod中容器的详细定义
containers: #必选,Pod中容器列表
- name: string #必选,容器名称,需符合RFC 1035规范
image: string #必选,容器的镜像名称
imagePullPolicy: [ Always|Never|IfNotPresent ] #获取镜像的策略 Alawys表示总是到仓库中去下载,本地仓库中有或者没有都去仓库中下载 IfNotPresent表示如果本地有镜像就使用没有就去下载,Nerver如果有镜像就用,没有也不去下载,需要用户手动去下载镜像
command: [string] #容器的启动命令列表,如不指定,使用打包时使用的启动命令
args: [string] #容器的启动命令参数列表
workingDir: string #容器的工作目录
volumeMounts: #挂载到容器内部的存储卷配置
- name: string #引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名
mountPath: string #存储卷在容器内mount的绝对路径,应少于512字符
readOnly: boolean #是否为只读模式
ports: #需要暴露的端口库号列表
- name: string #端口的名称
containerPort: int #容器需要监听的端口号
hostPort: int #容器所在主机需要监听的端口号,默认与Container相同
protocol: string #端口协议,支持TCP和UDP,默认TCP
env: #容器运行前需设置的环境变量列表
- name: string #环境变量名称
value: string #环境变量的值
resources: #资源限制和请求的设置
limits: #资源限制的设置
cpu: string #Cpu的限制,单位为core数,将用于docker run --cpu-shares参数
memory: string #内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
requests: #资源请求的设置
cpu: string #Cpu请求,容器启动的初始可用数量
memory: string #内存请求,容器启动的初始可用数量
livenessProbe: #对Pod内各容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种方法即可
exec: #对Pod容器内检查方式设置为exec方式
command: [string] #exec方式需要制定的命令或脚本
httpGet: #对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、port
path: string
port: number
host: string
scheme: string
HttpHeaders:
- name: string
value: string
tcpSocket: #对Pod内个容器健康检查方式设置为tcpSocket方式
port: number
initialDelaySeconds: 0 #容器启动完成后首次探测的时间,单位为秒
timeoutSeconds: 0 #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒
periodSeconds: 0 #对容器监控检查的定期探测时间设置,单位秒,默认10秒一次
successThreshold: 0
failureThreshold: 0
securityContext:
privileged: false
restartPolicy: [Always | Never | OnFailure] #Pod的重启策略,Always必须重启,总是重启,OnFailure表示只有状态为错误时才重启,Nerver表示不再重启该Pod
nodeSelector: obeject #设置NodeSelector表示将该Pod调度到包含这个label的node上,以key:value的格式指定
imagePullSecrets: #Pull镜像时使用的secret名称,以key:secretkey格式指定
- name: string
hostNetwork: false #是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
volumes: #在该pod上定义共享存储卷列表
- name: string #共享存储卷名称 (volumes类型有很多种)
emptyDir: {} #类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值
hostPath: string #类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录
path: string #Pod所在宿主机的目录,将被用于同期中mount的目录
secret: #类型为secret的存储卷,挂载集群与定义的secre对象到容器内部
scretname: string
items:
- key: string
path: string
configMap: #类型为configMap的存储卷,挂载预定义的configMap对象到容器内部
name: string
items:
- key: string
path: string