❤️不会写K8S资源编排yaml文件?一文教会你如何掌握编写yaml文件的技巧❤️

Posted Jiangxl~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了❤️不会写K8S资源编排yaml文件?一文教会你如何掌握编写yaml文件的技巧❤️相关的知识,希望对你有一定的参考价值。

❤️不会写K8S资源编排yaml文件?一文教会你如何掌握编写yaml文件的技巧❤️


本文分为两个章节:首先熟悉下K8S指令以及资源的类型、然后开始进入正文传授经验

K8S YAML推荐文章

K8S资源编排YAML文件详解

Kubernetes集群使用yaml文件创建资源报错经验总结

一、熟悉下K8S常用命令参数以及资源管理

1.K8S集群常用命令

1.1.查询资源状态

kubectl get cs                          # 查看集群状态
kubectl get nodes                       # 查看集群节点信息
kubectl get ns                          # 查看集群命名空间
kubectl get svc -n kube-system          # 查看指定命名空间的服务
kubectl get pod <pod-name> -o wide      # 查看Pod详细信息
kubectl get pod <pod-name> -o yaml      # 以yaml格式查看Pod详细信息
kubectl get pods,deploy,statefulset,sv,cm        # 查看资源对象,查看所有Pod,deploy,statefulset,sv,cm列表
kubectl get rc,service                  # 查看资源对象,查看rc和service列表
kubectl get pod,svc,ep --show-labels    # 查看pod,svc,ep能及标签信息
kubectl get all --all-namespaces        # 查看所有的命名空间

1.2.查询资源的事件信息

语法格式:kubectl describe 资源类型 资源名称

kubectl describe deploy deploy_name

1.3.查看pod资源的日志内容

kubectl logs -f pod_name -n namespace

1.4.运行一个资源

kubectl run nginx-pod --image=nginx --port=80

1.5.编辑一个资源的yaml文件

语法格式:kubectl edit 资源类型 资源名称

kubectl edit deploy deploy_name

1.6.删除一个资源

语法格式:kubectl delete资源类型 资源名称

kubectl delete deploy deploy_name

2.kubectl高级命令参数

create						#创建一个资源	
edit						#编辑一个资源	
get							#查看一个资源信息	
patch						#更新一个资源	
delete						#删除一个资源	
explain						#展示资源文档
create  					#创建一个资源  
edit    					#编辑一个资源  
get 					    #查看一个资源信息 
patch   					#更新一个资源  
delete  					#删除一个资源  
explain 					#展示资源文档
run						    #运行一个指定的镜像
expose						#暴露资源为service
describe					#查看资源的详细输出
logs						#查看容器在pod中的日志
attach						#进入运行的容器
exec						#进入容器
cp					        #在pod内外复制文件
rollout						#管理资源的发布
scale						#扩容或收缩pod的数量
autoscale					#自动跳转pod的数量
apply						#更新资源配置
label						#更新资源上的标签
cluster-info				#显示集群信息
version						#显示集群版本

3.k8s常用资源类型

集群级别资源

资源名称缩写资源作用
nodesno集群组成部分
namespacens隔离pod

pod资源

资源名称缩写资源作用
podpo装在容器

pod资源控制器

资源名称缩写资源作用
replicationcontrollersrc控制pod资源
replicasetsrs控制pod资源
deploymentdeploy控制pod资源
daemonsetsds控制pod资源
jobs控制pod资源
cronjobscj控制pod资源
horizontalpodautoscalershpa控制pod资源
statefulsetssts控制pod资源

服务发现资源

资源名称缩写资源作用
servicessvc统一pod对外接口
ingressing统一pod对外接口

存储资源

资源名称缩写资源作用
volumeattachments存储
persistentvolumespv存储
persistentvolumeclaimspvc存储

配置资源

资源名称缩写资源作用
configmapscm配置
secrets配置

二、教你有技巧的编写K8S编排文件

1.快速生成一个deployment控制器的YAML文件

利用kubectl create创建一个资源加上–dry-run参数以及-o yaml参数生成YAML文件内容

这样的方式既不会创建一个资源,同时我们也拿到了一个基本的YAML文件,在这个YAML文件的基础上进行配置即可

# kubectl create deployment nginx --image=nginx:1.17 -o yaml --dry-run
W1013 17:02:29.974994   20517 helpers.go:553] --dry-run is deprecated and can be replaced with --dry-run=client.
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: nginx
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:1.17
        name: nginx
        resources: {}
status: {}

2.虽然快速拿到了YAML文件,但是不会配置怎么办?

这就要用到kubectl explain参数了,会起到超级大的作用

以Pod资源为例:查看Pod资源YAML可配置的参数列表

[root@k8s-master ~]# kubectl explain pod
KIND:     Pod
VERSION:  v1						//编写yaml文件时第一行的版本号可以从这里进行查找
FIELDS:									//可配置的一级属性,基本所有资源都是如下五个,如果当前级别配置参数后面<>中是string就表示没有下一级配置参数,直接填写一个字符串即可,如果<>为object说明他还有下一级配置参数,可以通过资源类型.属性的方式查找
   apiVersion	<string>					//当前资源支持的版本
   kind	<string>						//控制器类型
   metadata	<Object>							//元数据
   spec	<Object>							//设置属性
   status	<Object>					//记录pod的状态,包括ip地址、创建时间等等,是自动增加的,不是手动写入的

打印出Pod资源钩子函数的可执行参数列表

技巧就是按着下面的命令格式一级一级往里套就可以写出漂亮的yaml文件了

[root@binary-k8s-master1 ~]# kubectl explain pod.spec.containers.lifecycle.postStart
[root@binary-k8s-master1 ~]# kubectl explain pod.spec.containers.lifecycle.postStart.exec|httpGet|tcpSocket
KIND:     Pod
VERSION:  v1
RESOURCE: lifecycle <Object>
FIELDS:
   postStart	<Object>			//定义容器启动后执行的钩子函数
     exec	<Object>				//exec命令方式,在容器里面执行相应的命令
       command		<[]string>		//指定运行的命令
   	 httpGet	<Object>			//httpGet方式,探测容器应用的url
   	   host	<string>				//主机地址,一般就是pod地址
   	   path	<string>				//请求的url路径
   	   port	<string>				//应用端口号
   	   scheme	<string>			//协议
     tcpSocket	<Object>			//tcpSocket方式,访问容器指定的socket
     	host	<string>			//pod地址
     	port	<string>			//端口号
   preStop	<Object>				//定期容器关闭前执行的钩子函数
     exec	<Object>				//exec命令方式,在容器里面执行相应的命令
     ·····
   	 httpGet	<Object>			//httpGet方式,探测容器应用的url
   	 ·····
     tcpSocket	<Object>			//tcpSocket方式,访问容器指定的socket
     ·····     

以上是关于❤️不会写K8S资源编排yaml文件?一文教会你如何掌握编写yaml文件的技巧❤️的主要内容,如果未能解决你的问题,请参考以下文章

一文带你了解K8S 容器编排(下)

K8S中 yaml 文件详解(poddeploymentservice)

K8S中 yaml 文件详解(poddeploymentservice)

K8S中 yaml 文件详解(poddeploymentservice)

K8S之创建deployment关联NodePort服务

一文带你理解14个K8S必备基础概念