目录

k8s中yaml文件的编写

目录

1.编写pod.yaml

2.编写deploment.yaml

3.编写service.yaml关联创建的pod

4.总结获取K8S资源配置清单文件模板方法

5.补充


1.编写pod.yaml

复制代码
vim demo1-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: scj-pod
  namespace: xy101
  labels:
    app: nginx
    mylove: tangjun
    myclass: xy101
spec:
  containers:
  - name: nginx
    image: nginx:1.20
    ports:
    - containerPort: 80
      name: http
      protocol: TCP
    env:
    - name: mylove
      value: tangjun

各行详细介绍

使用kubectl explain pods可查看到编写pod的一级标题

  • apiVersion: apps/v1 #指定api版本标签
  • kind: Deployment #定义资源的类型/角色,deployment为副本控制器,此处资源类型可以是Deployment、Job、Ingress、Service等
  • metadata: #定义资源的元数据信息,比如资源的名称、namespace、标签等信息
  • spec: #定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性

metadata: #定义资源的元数据信息,比如资源的名称、namespace、标签等信息

kubectl explain pods.metadata 进一步查看metadata所包含内容

书写格式:

<string> 字符串 字段: 字符串 字段: "字符串" 字段: '字符串'

<map[string]string> 映射(值是一个或多个键值对) 字段:

key1: value1

key2: value2

spec: #定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性

kubectl explain pods.spec #进一步查看spec

containers <[]Object> -required- #-required-表示必备字段;<[]Object>表示字符串列表

格式

<[]Object>字段: 字段: ["值1", "值2"]

  • 值1

  • 值2

复制代码
containers:                #定义容器属性
 
kubectl explain pods.spec.containers  #进一步查看containers字段

kubectl explain pods.spec.containers.ports

kubectl explain pods.spec.containers.env

kubectl apply -f demo1-pod.yaml   #创建pod
kubectl get pods -n xy101   #查看pod
kubectl describe -n xy101 pod scj-pod   #可查看调度创建容器的具体过程

kubectl get -n xy101 pod --show-labels   #查看标签
kubectl exec -n xy101 -it scj-pod sh  #进入容器查看env

2.编写deploment.yaml

复制代码
vim demo2-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: scj-deploy
  namespace: xy101
  labels:
    app: nginx
    mylove: tangjun
spec:
  replicas: 5
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.20
        ports:
        - containerPort: 80
          name: http
          protocol: TCP
        env:
        - name: mylove
          value: tangjun
        - name: yourlove
          value: scj

查看编写deployment.yaml文件的第一字段

复制代码
kubectl explain deployment   #查看编写deployment的第一字段

查看第一字段下metadata和spec下的字段

复制代码
kubectl explain deployment.metadata  #可根据此命令进一步查看metadata字段
metadata:                #其中包含三大项必不可少,name、namespace、labels
  name: scj-deploy
  namespace: xy101
  labels:
    app: nginx
    mylove: tangjun

kubectl explain deployment.spec #进一步查看spec的字段

查看spec下selector的字段

复制代码
kubectl explain deployment.spec.selector  #查询selector的字段
 
matchLabels:        #定义匹配标签

查看spec下template的字段

复制代码
kubectl explain deployment.spec.template   #查看spec中template字段下的字段
metadata   #定义pod元数据  通常主要定义labels,labels的值需要与标签选择器的值一致
spec   #定义pod属性

查看template下spec的字段

复制代码
kubectl explain deployment.spec.template.spec   #查看template下spec字段
containers    <[]Object> -required-   #必选字段
 
kubectl explain deployment.spec.template.spec.containers  #进一步查看spec下containers 字段
 
kubectl explain deployment.spec.template.spec.containers.ports   #进一步查看containers下ports字段

查看spec下containers中的字段

复制代码
kubectl explain deployment.spec.template.spec.containers

查看containers下ports的字段

复制代码
kubectl explain deployment.spec.template.spec.containers.ports

查看containers下的env字段

复制代码
kubectl explain deployment.spec.template.spec.containers.env

创建deployment控制器

复制代码
kubectl apply -f demo2-deploy.yaml
kubectl get -n xy101 all

3.编写service.yaml关联创建的pod

复制代码
apiVersion: v1
apiVersion: v1
kind: Service
metadata:
  name: scj-svc
  namespace: xy101
  labels:
    app: nginx
    mylove: tangjun
spec:
  selector:
    app: nginx
  type: NodePort
  ports:
  - port: 8080
    targetPort: 80

查看编写svc.yaml文件的第一字段

复制代码
kubectl explain svc

metadata三要素1.name2.namespace3.labels

设置spec下的字段

复制代码
kubectl explain svc.spec

进一步查看spec下ports的字段

复制代码
kubectl explain svc.spec.ports

创建service

复制代码
kubectl apply -f demo3-svc.yaml
kubectl get -n xy101 svc
kubectl describe -n xy101 endpoints scj-svc
kubectl get -n xy101 pod -o wide

如何固定nodeport、clusterip

复制代码
kubectl explain svc.spec.ports   #查询指定nodeport的字段,于ports下
kubectl explain svc.spec    #查询指定clusterip的字段,于svc下的spec中

kubectl apply -f demo3-svc.yaml
kubectl get -n xy101 svc

kubectl apply -f demo3-svc.yaml 
kubectl get -n xy101 svc

4.总结获取K8S资源配置清单文件模板方法

方法1:根据现有资源导出yaml文件修改配置,重新创建

复制代码
kubectl get -n xy101 svc scj-svc -o yaml > demo4.yaml
vim demo4.yaml
只保留常用配置,删除多余的,配置,进行修改创建即可

方法2:根据现有资源,进入其配置中,复制模板,再进行创建

复制代码
kubectl edit -n xy101 svc scj-svc2   
即可复制其中的配置,获取模板

方法3:通过--dry-run选项模拟运行创建资源的命令获取

复制代码
kubectl create|run|expose -n <命名空间> <资源类型> <资源名称> [参数选项] --dry-run=client -o yaml > XXX.yaml


kubectl create -n xy101 deployment deploy-tan --image=soscscs/myapp:v1 --port=80 --replicas=3 --dry-run=client   #创建资源的结尾添加--dry-run选项模拟运行创建资源,此时不会创建资源
 
kubectl create -n xy101 deployment deploy-tan --image=soscscs/myapp:v1 --port=80 --replicas=3 --dry-run=client -o yaml > tan-deploy.yaml  #导出yaml文件,即可获取配置模板文件

方法4:手写yaml配置文件,可以根据 kubectl explain 命令获取资源的字段信息

5.补充

1.什么是external-traffic-policy

复制代码
kubectl explain svc.spec  #存在于 svc.spec中

在k8s的Service对象(申明一条访问通道)中,有一个"externalTrafficPolicy"字段可以设置。有2个值可以设置:Cluster或者Local。

1)Cluster表示:流量可以转发到其他节点上的Pod。

2)Local表示:流量只发给本机的Pod。

图示:

2.k8s的service如何确保客户端的tcp消息每次都发给同一个pod?

设置Service的sessionAffinity为 ClientIP. 这样同一个client的请求会被kube-proxy转发到同一个Pod。

sessionAffinity 默认是None,客户端的请求被kube-proxy按照RR或Random算法转发到service的pod set,不能保证每次发到同一个Pod。

本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
dessler3 小时前
Kubernetes(k8s)-Reloader介绍&使用
linux·运维·kubernetes
weixin_425878233 小时前
k8s 自动伸缩的场景与工作原理
java·容器·kubernetes
lzz的编码时刻3 小时前
K8s私有仓库拉取镜像报错解决:x509 certificate signed by unknown authority
云原生·容器·kubernetes
码哝小鱼3 小时前
docker stack常用命令
docker·容器·eureka
NorthCastle6 小时前
Centos7 上 卸载 docker
运维·docker·容器
{⌐■_■}6 小时前
【Kubernetes】RBAC(基于角色的访问控制)如何设置?如何管理 Kubernetes 的权限?
云原生·容器·kubernetes
kfepiza7 小时前
docker mysql 笔记250406
docker·容器
kfepiza7 小时前
`docker run --restart no,always,on-failure,unless-stopped` 笔记250406
docker·容器
扫地的小何尚7 小时前
使用NVIDIA NIM微服务加速科学文献综述
开发语言·数据结构·人工智能·深度学习·微服务·云原生·架构
rider18910 小时前
【7】搭建k8s集群系列(二进制部署)-master节点之配置kubectl客户端证书
云原生·容器·kubernetes