前言
通过kubectl能够对K8S资源进行各种管理,但是操作起来不太方便,K8S提供了声明式的资源管理,即通过编写YML/JSON文件来管理。
资源分类:
1、 名称空间级别(工作负载:Pod,Rs,Job…服务发现及负载均衡:service,ingress…配置及存储:Volume,CSI…特殊类型存储:configmap,secret…);
2、 集群级别(namespace,node,role…);
3、 元数据级别(Hpa,podTemplate…);
查看
# 查看pod
kubectl get pods -n test
# 查看pod资源清单
kubectl get pods test-nginx-cc44fcc54-cdlh9 -o yaml -n test
# 查看svc
kubectl get svc -n test
# 查看svc资源清单
kubectl get svc test-nginx -o yaml -n test
# 查看svc下metadata解释文档
kubectl explain svc.metadata
部署nginx
1、 添加pod;
# 编写pod配置清单
vim nginx-pod.yaml
# k8sAPI版本
apiVersion: v1
# 资源类型
kind: Pod
# 元数据对象
metadata:
元数据对象名称
name: nginx-pod
元数据对象命名空间
namespace: test
资源标签
labels:
app: nginx
自定义注解列表
annotations:
自定义注解名字
name: test-annotation001
spec:
容器重启策越,默认Always表示一旦不管以何种方式终止运行都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该Pod
restartPolicy: Never
节点选择器,需先给节点定义标签
nodeSelector:
node: work001
pull镜像时使用secret名称
imagePullSecrets:
是否使用主机网络模式,默认false,设置为true时,不适用docker网桥
hostNetwork:
容器相关
containers:
容器名
- name: nginx
使用镜像
image: daocloud.io/library/nginx:1.7.11
镜像拉取策略,默认Always,每次都尝试拉取镜像,Never表示仅使用本地镜像,IfnotPresent表示优先使用本地镜像,否则下载镜像
imagePullPolicy: Always
容器启动命令,数组可指定多个,不指定使用打包时的启动命令
command: [string]
容器启动命令参数,数组可指定多个
args: [string]
容器的工作目录
workingDir: string
指定容器内部存储卷配置
volumeMounts:
存储卷名称
- name: nfs
挂载路径
mountPath: "/usr/share/nginx/html"
是否为只读模式
readOnly: true
容器暴露的端口列表
ports:
端口号名称
- name: nginx-port
监听端口号
containerPort: 80
容器所在主机需要监听的端口号,默认与Container相同,如果设置了,同一个主机将不同启动相同副本,会端口冲突
hostPort: 80
端口协议,支持TCP和UDP,默认TCP
protocol: TCP
容器运行前需设置的环境变量列表,name-变量名称,value-变量值
env:
- name:
- value:
资源限制
resources:
设置容器运行时资源上限
limits:
CPU核数,两种方式,浮点数或者是整数+m,0.1=100m,最少值为0.001核(1m)
cpu: 1
内存限制
memory: 100M
容器启动和调度时的限制设置
requests:
cpu: 1
memory: 100M
健康检查,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket
livenessProbe:
# 创建
kubectl create -f nginx-deployment.yaml
1、 添加service;
# 编写service资源清单
vim nginx-service.yaml
# api版本
apiVersion: v1
# 资源类型
kind: Service
# 元数据
metadata:
labels:
app: nginx-service
name: nginx-service
命名空间,默认为default
namespace: test
spec:
Service需要暴露的端口列表
ports:
服务监听的端口号
- port: 80
端口名称
name: nginx-port
端口协议,支持TCP和UDP,默认值为TCP
protocol: TCP
需要转发到后端Pod的端口号
targetPort: 80
NodePort时指定映射到物理机的端口号
nodePort: 30000
选择器配置,将选择具有指定标签的Pod作为管理范围
selector:
app: nginx
Service的类型,默认值为ClusterIP:虚拟服务的IP;NodePort:使用宿主机的端口;LoadBalancer:使用外接负载均衡器完成到服务的负载分发
type: NodePort
# 创建
kubectl create -f nginx-service.yaml
1、 部署都可通过work001节点的ip+30000访问nginx首页地址;
修改
修改外部访问端口为31000
# 离线修改
vim nginx-service.yaml
# 生效
kubectl apply -f nginx-service.yaml
修改外部访问端口为32000
# 在线修改
kubectl edit service nginx-service -n test
删除
# 陈述式删除
kubectl delete service nginx-service -n test
# 声明式删除
kubectl delete -f nginx-pod.yaml
kubectl delete -f nginx-service.yaml