资源范式:五个一级字段
kind:<String>指明对象的类型(资源类型),类型标签
apiVersion:<String>指明对象的类型(资源类型),类型隶属的API群组
metadata:<Object>对象元数据,名称/标签/注解和隶属的名称空间
spec:<Object>对象数据,期望状态
status:<Object>资源的实际状态,由系统组件自行负责维护
系统默认名称空间
default 默认使用名称空间
kube-node-lease
kube-public
kube-system 系统级名称空间
service类型:
cludterIP:仅支持集群内部的客户访问
nodepoet:支持集群内部的客户访问,同时支持集群外部的客户端通过任何一个的节点IP地址进行访问,但要使用特定端口,分配的范围:30000-32768
创建service:
[root@K8s-master01 ~]#kubectl create service nodeport demoapp --tcp=8080:80 -n demo
service/demoapp created
查看该名称空间下的pod明细信息,可以看到外部访问端口号:
[root@k8s-master02 ~]#kubectl get svc -n demo
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
demoapp NodePort 10.97.101.72 <none> 80:31994/TCP 11s
在集群外部访问节点IP和外部访问端口,可以访问到pod:
http://10.0.0.101:31994/
iKubernetes demoapp v1.0 !! ClientIP: 10.244.1.0, ServerName: demoapp-55c5f88dcb-848mv, ServerIP: 10.244.3.2!
#此时,通过所有master节点IP加端口,都可以访问到,并且还会自动做负载均衡,轮询访问node节点
Pod的资源配置
下载镜像策略
imagePullPolicy:
1.IfnotPresent:在镜像标签不是latest时,当前节点存在相关image时,就直接使用,否则,就去pull image;
2.Always:无论当前节点是否存在相关的image,都要执行pull image
3.Never:无论当前节点是否存在相关的image,都不执行pull image
向容器传递环境变量
[root@k8s-master02 chapter4]#vim pod-using-env.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-using-env
namespace: default
spec:
containers:
- name: demo
image: ikubernetes/demoapp:v1.0
imagePullPolicy: IfNotPresent
env:
- name: HOST
value: "127.0.0.1"
- name: PORT
value: "8080"
查询参数传递成功:
[root@k8s-master02 chapter4]#kubectl exec pod-using-env -- netstat -tnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN
查看pod运行到哪个工作节点:
[root@k8s-master02 chapter4]#kubectl get pods -o wide
重启策略
Pod的重启策略:决定了容器终止后是否应该重启
◼ Always:无论何种exit code,都要重启容器
◼ OnFailure:仅在exit code为非0值(即错误退出)时才重启容器
◼ Never:无论何种exit code,都不重启容器
应用监控Pod的健康状态监测机制
Pod支持的监测类型
◼ startup Probe
◼ liveness Probe
◼ readiness Probe
监测机制
◼ Exec Action:根据指定命令的结果状态码判定
◼ TcpSocket Action:根据相应TCP套接字连接建立状态判定
◼ HTTPGet Action:根据指定https/http服务URL的响应结果判定
配置参数
◼ initialDelaySeconds
◼ periodSeconds
◼ timeoutSeconds
◼ successThreshold
◼ failureThreshold
安全上下文
Pod及容器的安全上下文
◼ 一组用来决定容器是如何创建和运行的约束条件,这些条件代表创建和运行容器时使用的运行时参数
◼ 给了用户为Pod或容器定义特权和访问控制机制
Pod和容器的安全上下文设置主要包括以下几个方面
◼ 自主访问控制DAC
◼ 容器进程运行身份及资源访问权限
◼ Linux Capabilities
◼ seccomp
◼ AppArmor
◼ SELinux
◼ Privilgegd Mode
◼ Privilege Escalation
Kubernetes支持在Pod及容器级别分别使用安全上下文
阿里云知行实验室上的实验:“理解及使用Security Context”
资源需求(requests)和限制(limits)
资源需求和资源限制
◼ 资源需求(requests)
◆定义需要系统预留给该容器使用的资源最小可用值
◆容器运行时可能用不到这些额度的资源,但用到时必须确保有相应数量的资源可用
◆资源需求的定义会影响调度器的决策
◼ 资源限制(limits)
◆定义该容器可以申请使用的资源最大可用值,超出该额度的资源使用请求将被拒绝
◆该限制需要大于等于requests的值,但系统在其某项资源紧张时,会从容器那里回收其使用的超出其requests值的那部
分
requests和limits定义在容器级别,主要围绕cpu、memory和hugepages三种资源
阿里云知行实验室上的实验:“资源需求和资源限制”
资源配置模板
apiVersion: v1
kind: Pod
metadata:
name:
namespace:
labels:
key1: value1:
spec:
containers:
- name:
image:
- name:
image:
- name:
image:
securityContext: {}
startProbe: {}
livenessProbe: {}
readinessProbe: {}
command: []string
args: []string
resources: {}
reuqests: {}
cpu: 100m
memory: 512Mi
limits: {}
env: {}
- name:
value:
imagePullPolicy:
restartPolicy:
securityContext: {}
手动生成资源配置模板
[root@k8s-master01 ~]#kubectl run demoapp-pod-002 --image=ikebernetes/demoapp:v1.0 --restart=Never --port=80 --dry-run=client -o yaml > demoapp-pod-002.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: demoapp-pod-002
name: demoapp-pod-002
spec:
containers:
- image: ikebernetes/demoapp:v1.0
name: demoapp-pod-002
ports:
- containerPort: 80
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Never
status: {}
标签:容器,name,资源配置,image,demoapp,Pod,pod,模板
From: https://blog.51cto.com/lmm01/6901469