K8s的常用命令以及yaml文件的创建

目录

一、声明式管理方法:YAML文件

1、yaml文件简介

2、yaml和json的主要区别:

3、YAML的语法格式

4、yaml文件组成部分

①控制器定义

5、查看api资源版本标签

6、编写nginx-deployment.yaml资源配置清单

6.1创建资源对象

6.2查看创建的pod资源

7、创建service服务并对外提供访问并测试

二、K8s中的port概述

①port

②nodeport

③targetport

④containerport

1、创建yaml文件模板

2、查看生产yaml格式

3、查看生成的json格式

4、通过yaml格式导出生成模板,并进行修改以及删除一些不必要的参数

5、查看字段帮助信息

6、怎样可以更轻松的写yaml

6.1用run命令生成

6.2用get命令导出

6.3yaml文件的学习方法

三、具体案例

1、案例需求:


一、声明式管理方法:YAML文件

①适合对资源的修改操作

②声明式资源管理方法依赖于资源配置清单文件对资源进行管理

③资源配置清单文件有两种格式:yaml(人性化,已读),json(易于api接口解析)

④对资源的管理,是通过事先定义在统一资源配置清单内,再通过陈述式命令应用到k8s集群中

⑤语法格式:kubectl create/apply/delete -f xxx.yaml

1、yaml文件简介

YAML仍然是一种标记语言,主要强调这种语言是以数据为中心,而不是以标记为中心,而像XML语言就使用了大量的标记。

YAML可读性高,易于理解,用来表达数据序列化的格式。它的语法和其他高级语言类型,还可以简单表达属组,散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构,各种配置文件。

yaml配置文件的后缀为.yml

2、yaml和json的主要区别:

①yaml使用空格缩进,这是python开发人员熟悉的领域

②javascript开发人员喜欢JSON,因为它是javascript的一个子集,可以直接在Javascript中解释和编写,同时使用简写方式生命JSON,在使用没有空格的典型变量名时,不需要键中的双引号。

③有很多解释器在YAML和JSON的所有语言中都能很好的工作。

④在许多情况下,yaml的空白格式可以更容易查看,因为格式化需要更人性化的方法

⑤如果您的编辑器中没有空格可见或缩进线指示符,那么yaml的空白虽然更紧凑,更容易查看,蛋可能难以手动编辑。

⑥JSON的序列化和反序列化要快得多,因为要检查的功能明显少于yaml,这使得更小更轻的代码能够处理JSON

⑦一个常见的误解是yaml需要较少的标点符号并且比JSON更紧凑,但这是完全错误的。空格是不可兼得,所以看起来字符比较少,但是如果你计算实际的空格是必要的,以便于正确解释yaml以及正确的缩进,你会发现yaml实际上需要比json更多的字符。json不使用空格来表示层次结构或分组,并且可以通过删除不必要的空格来轻松展平,以实现更紧凑的传输。

3、YAML的语法格式

Kubernetes支持yaml和json格式管理资源对象

JSON格式:主要用于api接口之间消息的传递

YAML格式:用于配置和管理,YAML的配置参数格式比较清晰

语法格式:

①大小写敏感

②以空格的方式缩进表示层级关系

③通常开头缩进两个空格(统一层级对应即可)

④不支持指标符tab缩进,只对空格表示缩进

⑤关键词字符后缩进一个空格,比如冒号都好后面需要缩进一个字符

⑥---表示yaml格式一个文件的开始

⑦支持“#”表示注释

4、yaml文件组成部分

①控制器定义

5、查看api资源版本标签

kubectl api-versions

如果是业务场景,一般首选使用 apps/v1(apps/v1 从 v1.9 版本开始提供 API)。
 
在 k8s v1.16 版本之前使用的是 extensions/v1beta1,extensions/v1beta1 从 v1.20 版本开始不再提供 Ingress 资源。
 
带有 beta 字样的代表的是测试版本,不用在生产环境中。

6、编写nginx-deployment.yaml资源配置清单

mkdir /opt/demo
cd /opt/demo/
 
参考模板:
vim nginx-deployment.yaml
apiVersion: apps/v1   #指定api版本标签
kind: Deployment      #定义资源的类型/角色,deployment 为副本控制器,
此处资源类型可以是Deployment、Job、 Ingress、 Service等
metadata:             #定义资源的元数据信息,比如资源的名称、namespace、标签等信息
  name: nginx-deployment   #定义资源的名称,在同一个namespace空间中必须是唯一的
  labels:             #定义资源标签(Pod的标签)
    app: nginx
spec:              #定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性
 replicas: 3       #定义副本数量
 selector :        #定义标签选择器
  matchLabels:     #定义匹配标签
    app: nginx     #匹配上面的标签,需与上面的标签定义的app保持一致
 template:         #定义业务模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配
  metadata:
    labels:
      app: nginx
  spec:
   containers:            #定义容器属性
   - name: nginx          #定义一个容器名,一个- name: 定义一个容器
    image: nginx:1.15.4   #定义容器使用的镜像以及版本
    ports:
    - containerPort: 80   #定义容器的对外的端口

6.1创建资源对象
kubectl create -f nginx-deployment.yaml
或者
kubectl apply -f nginx-deployment.yaml

6.2查看创建的pod资源
kubectl get pods -o wide -n kube-public
 
kubectl get deploy -n kube-public

7、创建service服务并对外提供访问并测试

vim nginx-service.yaml
 
apiVersion: v1
kind: Service
metadata:
  name: nginx-demo1
  namespace: kube-public
  labels:
    name: nginx-demo1
spec:
  type: NodePort
  ports:
    - port: 8080
      targetPort: 80
      nodePort: 31111
  selector:
    app: nginx-demo1

kubectl apply -f nginx-service.yaml
 
kubectl get svc -n kube-public

在浏览器输入 nodeIP: nodePort 即可访问
http://192.168.223.11:31111

二、K8s中的port概述

①port

port是k8s集群内部访问service的端口,即通过clusterIP:port可以从Pod所在的Node上访问到service

②nodeport

nodeport是外部访问k8s集群中service的端口,通过nodeIP:nodeport可以从外部访问到某个service

③targetport

tarport是pod的端口,从port或nodeport来的流量经过kube-proxy反向代理负载均衡转发到后端pod的targetpod上,最后进入容器

④containerport

containerport是pod内部容器的端口,targetport映射到containerport

1、创建yaml文件模板

kubectl run --dry-run打印相应的api对象而不是执行创建

--dry-run:试运行 
 
kubectl run nginx-ceshi --image=nginx --port=80  --dry-run

--dry-run表示试运行,不是真正的执行命令(测试命令是否正确),即并不会真的创建出pod和deployment实例,去掉该参数后即可真正执行命令。

2、查看生产yaml格式

使用--dry-run试运行可不触发生产命令,然后通过-o yaml可实现对其yaml资源配置清单的查看

kubectl run nginx-ceshi --image=nginx --port=80  --dry-run -o yaml

3、查看生成的json格式

可以通过-o json查看该命令产生的json配置清单

4、通过yaml格式导出生成模板,并进行修改以及删除一些不必要的参数

kubectl run nginx-ceshi --image=nginx --port=80  --dry-run -o yaml > nginx-ceshi.yaml

模板:
vim nginx-ceshi.yaml
apiVersion: apps/v1betal     #api 版本改成 api/v1
kind: Deployment
metadata:
  creationTimestamp: null    #删除
  labels:
    run: nginx-ceshi
  name: nginx-ceshi
spec: 
  replicas: 3
  selector: 
    matchLabels: 
      run: nginx-ceshi
  strategy: {}                #删除
  template: 
    metadata: 
      creationTimestamp: null #删除
      labels: 
        run: nginx-ceshi
    spec: 
      containers: 
      - image: nginx
        name: nginx-ceshi
        ports: 
        - containerPort: 80
        resources: {}         #删除
status: {}                    #删除

生成镜像并查看

将现有的资源生成模板导出

kubectl get pod/nginx-deployment-6f9f6d866c-w2sdc -o yaml -n kube-public
 
###注现在最新版本的kubctl  get 不支持 --export 参数

保存到文件中

kubectl get deployment.apps/nginx-deployment -o yaml -n kube-public > my-deploy.yaml

5、查看字段帮助信息

explain可以一层层的查看相关资源对象的帮助信息

kubectl explain deployments.spec.template.spec.containers
或
kubectl explain pods.spec.containers

6、怎样可以更轻松的写yaml

6.1用run命令生成

没有相关资源,使用run或者create命令--dry-run选项,后期可以修改yaml文件

kubectl run my-deploy --image=nginx --dry-run -o yaml > my-deploy.yaml
6.2用get命令导出

已有相关资源,使用get命令{--export选项:使用老版本的kubectl}

kubectl get deploy/nginx-deployment -o=yaml -n kube-public > new.yaml
6.3yaml文件的学习方法

①多看别人(官方)写的,能读懂
②能照着现场的文件改着用
③遇到不懂的,善用kubectl explain ...命令查看

三、具体案例

1、案例需求:

①自主式的pod pod

②资源名称:my-nginx-ky35

③命名空间:my-ky35

④容器镜像:nginx:1.14

⑤容器端口:80

⑥标签:njzb:my-ky35

⑦创建srvice去关联上面的pod

⑧修改页面,显示woshichaoren对外访问 输入地址就能访问

mkdir /opt/demo
[root@master01 ~]]#cd /opt/demo/
[root@master01 demo]]#vim pod-ns-svc.yaml

  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值