kubectl 命令行管理K8S(下)

目录

声明式资源管理方式

介绍

命令

修改yaml文件指定的资源

离线修改

在线修改

[YAML 语法格式](#YAML 语法格式)

[查看 api 资源版本标签](#查看 api 资源版本标签)

编辑yaml配置清单生成资源

编写yaml文件

yaml创建Deployment

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

yaml创建Pod

生成模板

pod模板

serivce模板

deployment模板

导入模板


声明式资源管理方式

介绍

1.适合于对资源的修改操作

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

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

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

4.语法格式:kubectl create/apply/delete -f xxxx.yaml

可理解成使用yaml配置文件里定义的配置来实现资源对象的管理操作

命令

应用yaml文件指定的资源

bash 复制代码
kubectl create -f xxx.yaml
kubectl apply -f xxx.yaml 
#区别:使用create创建资源是一次性的,如果使用apply创建,后期修改yaml文件再次执行apply可以实现更新资源

删除yaml文件指定的资源

bash 复制代码
 kubectl delete -f xxx.yaml

查看资源的yaml格式信息

bash 复制代码
kubectl get 资源名称 -o yaml

查看yaml文件字段说明

bash 复制代码
kubectl explain yaml文件中的字段(多级字段用 . 隔开)

修改yaml文件指定的资源

离线修改

修改yaml文件,并用 kubectl apply -f xxxx.yaml 文件使之生效

注意:当apply不生效时,先使用delete清除资源,再apply创建资源

bash 复制代码
例:
kubectl get service nginx -o yaml > nginx-svc.yaml
vim nginx-svc.yaml				#修改port: 8080
kubectl delete -f nginx-svc.yaml
kubectl apply -f nginx-svc.yaml
kubectl get svc

在线修改

直接使用 kubectl edit service nginx 在线编辑资源配置清单并保存退出即时生效(如port: 888)

PS:此修改方式不会对yaml文件内容修改

YAML 语法格式

●大小写敏感

●使用缩进表示层级关系

●不支持Tab键制表符缩进,只使用空格缩进

●缩进的空格数目不重要,只要相同层级的元素左侧对齐即可,通常开头缩进两个空格

●符号字符后缩进一个空格,如冒号,逗号,短横杆(-)等

●"---"表示YAML格式,一个文件的开始,用于分隔文件间

●"#"表示注释

查看 api 资源版本标签

编辑yaml配置清单生成资源

编写yaml文件有三种方式

直接编写:即从零开始写一个yaml文件,可以借用kubectl explain 字段名查看。

生成模板:使用kubectl run 资源 --dry-run=client > xxx.yaml 生成yaml模板文件,然后进行编辑。

导出模板:将现有资源使用 yaml 格式输出并导入 xxx.yaml 文件,然后进行编辑。

编写yaml文件

yaml创建Deployment
bash 复制代码
mkdir /opt/demo
cd demo/

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

#查看创建的pod资源
kubectl get pods -n kube-public
yaml创建service服务对外提供访问并测试
bash 复制代码
vim nginx-service.yaml
apiVersion: v1  
kind: Service  
metadata:
  name: nginx-service
  labels:
    app: nginx  
spec:
  type: NodePort  
  ports:
  - port: 8080
    targetPort: 80
    nodePort: 30007
  clusterIP: 10.0.0.239
  selector:
    app: nginx
bash 复制代码
/创建资源对象
kubectl create -f nginx-service.yaml 

//查看创建的service
kubectl get svc

在浏览器输入 nodeIP:nodePort 即可访问

http://192.168.75.20:30007

http://192.168.75.30:30007

详解k8s中的port:

●port

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

●nodePort

nodePort 是外部访问 k8s 集群中 service 的端口,通过 nodeIP: nodePort 可以从外部访问到某个 service。(默认:30000-32767)

●targetPort

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

●containerPort

containerPort 是 Pod 内部容器的端口,targetPort 映射到 containerPort。

yaml创建Pod
bash 复制代码
vim demo2.yaml
---
apiVersion: v1
kind: Pod    //类型为pod
metadata:
  name: mynginx
  labels:
    name: mynginx
spec:
  containers:    //指定容器镜像和端口
  - name: nginx
    image: nginx:1.18
    ports:
    - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginxpodsvc
  labels:
    name: mynginx
spec:
  type: NodePort    //nodeport类型可以对外服务
  ports:
  - port: 8008    //服务指定8008端口,因为没有指定node端口,会随机生成
    targetPort: 80
  selector:
    name: mynginx

生成模板

pod模板
bash 复制代码
kubectl run pod名称 --image=指定镜像 --port=pod端口 --dry-run=client -o yaml > xxx.yaml
# kubectl run 可以运行一个容器
# --dry-run=client 可以实现空跑一个容器,不会实际创建(用于测试)
# -o yaml 输出yaml格式
# > xxx.yaml 将输出内容导入指定的yaml文件
serivce模板
bash 复制代码
kubectl expose deployment 服务名称 --port=服务端口 --target-port=pod端口 --type=端口类型 --dry-run=client -o yaml > xxx.yaml
deployment模板
bash 复制代码
kubectl create deployment 名称 --image=镜像 --port=容器端口 --replicas=n --dry-run=client -o yaml > xxx.yaml

导入模板

bash 复制代码
kubectl get 资源类型 资源名称 -o yaml > xxx.yaml        #这种方式需要删除改动的地方较多
#查看字段帮助信息,可一层层的查看相关资源对象的帮助信息
kubectl explain deployments.spec.template.spec.containers
或
kubectl explain pods.spec.containers
相关推荐
dessler5 分钟前
Docker-如何启动docker
运维·docker·云原生·容器·eureka
zhy295635 分钟前
【DOCKER】基于DOCKER的服务之DUFS
运维·docker·容器·dufs
Algorithm157627 分钟前
云原生相关的 Go 语言工程师技术路线(含博客网址导航)
开发语言·云原生·golang
蜜獾云1 小时前
docker 安装雷池WAF防火墙 守护Web服务器
linux·运维·服务器·网络·网络安全·docker·容器
年薪丰厚3 小时前
如何在K8S集群中查看和操作Pod内的文件?
docker·云原生·容器·kubernetes·k8s·container
zhangj11253 小时前
K8S Ingress 服务配置步骤说明
云原生·容器·kubernetes
岁月变迁呀3 小时前
kubeadm搭建k8s集群
云原生·容器·kubernetes
墨水\\3 小时前
二进制部署k8s
云原生·容器·kubernetes
Source、3 小时前
k8s-metrics-server
云原生·容器·kubernetes
上海运维Q先生3 小时前
面试题整理15----K8s常见的网络插件有哪些
运维·网络·kubernetes