hincky的主页 hincky的主页
  • 学习笔记

    • Vue笔记
    • Vuepress
    • nginx
  • 语言类

    • java
    • go
    • python
    • 设计模式
  • 框架类

    • Spring
    • Spring Security
    • Mybatis
  • 容器技术

    • docker
    • k8s
    • helm
    • prometheus
    • grafana
    • jenkins
  • 命令集合

    • linux命令
    • docker命令
    • git命令
    • vim命令
    • k8s命令
  • 数据库

    • sql
    • mysql
  • 协议

    • 网络模型
    • http/1.1
    • WebSocket
    • http/2
    • TLS/SSL
    • tcp
    • IP
    • tcpdump抓包命令
    • wireshark抓包工具
  • 通用

    • Git
  • 技术分享

    • git push/pull总是超时怎么办
    • idea debug技巧
    • postman使用
    • 问题总结
    • idea使用技巧
  • Oauth2

    • Oauth2原理
  • 项目列表

    • redis项目
    • 微服务项目
  • 分类
  • 标签
  • 归档
  • 随笔
GitHub (opens new window)

Hincky

当有趣的人,做想做的事
  • 学习笔记

    • Vue笔记
    • Vuepress
    • nginx
  • 语言类

    • java
    • go
    • python
    • 设计模式
  • 框架类

    • Spring
    • Spring Security
    • Mybatis
  • 容器技术

    • docker
    • k8s
    • helm
    • prometheus
    • grafana
    • jenkins
  • 命令集合

    • linux命令
    • docker命令
    • git命令
    • vim命令
    • k8s命令
  • 数据库

    • sql
    • mysql
  • 协议

    • 网络模型
    • http/1.1
    • WebSocket
    • http/2
    • TLS/SSL
    • tcp
    • IP
    • tcpdump抓包命令
    • wireshark抓包工具
  • 通用

    • Git
  • 技术分享

    • git push/pull总是超时怎么办
    • idea debug技巧
    • postman使用
    • 问题总结
    • idea使用技巧
  • Oauth2

    • Oauth2原理
  • 项目列表

    • redis项目
    • 微服务项目
  • 分类
  • 标签
  • 归档
  • 随笔
GitHub (opens new window)
  • 容器技术

    • docker

    • k8s

      • rke包管理工具
        • 前期准备
          • 手动修改
          • 代码自动修改
          • 关闭防火墙和selinux
          • sed用法
          • 关闭swap
          • 时间同步
        • install docker
          • 配置docker yum源
          • install docker
          • 配置docker容器镜像加速器
        • install docker compose
        • add rancher user
        • 生成ssh证书用于部署集群
          • 验证ssh证书是否可用
        • install rke
        • init rke config.yaml
        • 集群部署
        • install kubectl
          • 让kubectl 访问到集群
        • 部署rancher管理k8s集群
          • 将本地集群添加到rancher
        • 集群节点更新
          • 添加worker节点
          • 添加/删除etcd节点
        • 部署nginx
        • 部署nginx-ingress
      • api对象
        • 创建对象的yaml文件
        • 通过yaml创建/更新对象
        • 更新yaml文件来更新对象
        • 给对象声明 volume
      • deployment
      • pod
        • pod 组成
        • 开发容器网络插件的注意点
        • 如何共享volume
      • service
        • 实战:如何用yaml编写service,kube-proxy
      • ingress集群的流量出入口
        • 为什么要有ingress
          • 路由访问角度
          • 负载角度
          • 小结
        • 为什么要有ingress controller
        • 为什么要有 ingress class
        • 如何用yaml编写ingress,ingress class
          • ingress.yml
          • 创建模板yaml
          • ingress-class.yml
        • 在k8s中使用ingress,ingress class
        • 在k8s中使用ingress controller
      • ingress controller实战
      • yml文件
        • pod
        • job/cronjob
          • job
          • cronjob
        • ConfigMap/Secret
          • ConfigMap
          • Secret
          • 如何使用/注入配置信息对象
          • Env
          • Volume
          • 总结
        • deployment
          • 应用伸缩,弹性扩容
        • DaemonSet
          • taint 污点
          • toleration 容忍度
          • 静态pod
        • service
          • 小改造
          • service的负载均衡方式
        • ingress
          • ingress controller
          • ingress yaml
          • ingress class
    • helm

    • rancher

    • prometheus

    • grafana

    • containerd

    • jenkins

  • 命令集合

  • 软路由

  • 容量保障技术

  • 运维
  • 容器技术
  • k8s
hincky
2022-10-12
目录

api对象

# API对象

控制器模式

每一个 API 对象都有一个叫作 Metadata 的字段,这个字段就是 API 对象的“标识”,即元数据,它也是我们从 Kubernetes 里找到这个对象的主要依据

# 创建对象的yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  Label:
...
  Annotation:
1
2
3
4
5
6
7

一个 Kubernetes 的 API 对象的定义:

  • Metadata
  • Spec

前者存放的是这个对象的元数据,对所有 API 对象来说,这一部分的字段和格式基本上是一样的;而后者存放的,则是属于这个对象独有的定义,用来描述它所要表达的功能。

Labels 就是一组 key-value 格式的标签,而像 Deployment 这样的控制器对象,就可以通过这个 Labels 字段从 Kubernetes 中过滤出它所关心的被控制对象。

Annotations(和Labels同层级),它专门用来携带 key-value 格式的内部信息。大多是自动加上去的

# 通过yaml创建/更新对象

kubectl apply -f xxx.yaml
1

$ kubectl get pods -l app=nginx
NAME                                READY     STATUS    RESTARTS   AGE
nginx-deployment-67594d6bf6-9gdvr   1/1       Running   0          10m
nginx-deployment-67594d6bf6-v6j7w   1/1       Running   0          10m
1
2
3
4
5

-l 参数,即获取所有匹配 app: nginx 标签的 Pod。需要注意的是,在命令行中,所有 key-value 格式的参数,都使用“=”而非“:”表示。

kubectl describe pod nginx-deployment-67594d6bf6-9gdvr
1

kubectl describe 命令返回详细信息,重点关注Event事件,它表示对 API 对象的所有重要操作,都会被记录在这个对象的 Events 里,是进行 Debug 的重要依据。

# 更新yaml文件来更新对象

修改了对象的yaml文件之后,通过下面的指令更新

kubectl replace -f nginx-deployment.yaml
1

# 给对象声明 volume

volume 属于pod对象的一部分,修改这个 YAML 文件里的 template.spec 字段

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.8
        ports:
        - containerPort: 80
        volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: nginx-vol
      volumes:
      - name: nginx-vol
        emptyDir: {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

Pod 声明的所有 Volume。它的名字叫作 nginx-vol,类型是 emptyDir(这个类似 Docker 的隐式 Volume 参数,即:不显式声明宿主机目录的 Volume)

Kubernetes 也会在宿主机上创建一个临时目录,这个目录将来就会被绑定挂载到容器所声明的 Volume 目录上。

 Kubernetes 的 emptyDir 类型,只是把 Kubernetes 创建的临时目录作为 Volume 的宿主机目录,交给了 Docker。这么做的原因,是 Kubernetes 不想依赖 Docker 自己创建的那个 _data 目录。

1

1

1

1
编辑 (opens new window)
#k8s
rke包管理工具
deployment

← rke包管理工具 deployment→

最近更新
01
人生前期重要的能力
05-17
02
防火墙命令
04-11
03
docker-compose部署mysql主从集群
03-22
更多文章>
Theme by Vdoing | Copyright © 2022-2023 Hincky | MIT License | 粤ICP备2022120427号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式