k8s基本概念、k8s对象、三个命令玩转所有的yaml写法、给vscode安装插件、kubectl和kubelet及自动补全

news2024/9/23 19:14:40

文章目录

    • 1、K8S基本概念
    • 2、kubernetes Objects(k8s对象)
      • 2.1、定义
      • 2.2、对象的spec和status
      • 2.3、如何写任意资源的yaml(以Pod为例)
      • 2.4、pod的yaml文件
      • 2.5、k8s对象yaml的结构
      • 2.6、管理k8s对象
      • 2.7、对象名称
      • 2.8、名称空间
      • 2.9、标签和选择器
        • 2.9.1、标签
        • 2.9.2、标签选择器
      • 2.10、注解annotation
    • 3、三个命令玩转所有的yaml写法
    • 4、给vscode安装插件
    • 5、kubectl和kubelet
    • 6、自动补全

1、K8S基本概念

  • 集群
    • master
    • worker
      • Node
  • Pod
    • 应用最终以Pod为一个基本单位部署
  • Label
    • 很多资源都可以打标签
  • Deployment
    • 应用部署用它,deployment最终会产生Pod
  • Service
    • 负载均衡机制

2、kubernetes Objects(k8s对象)

2.1、定义

  • k8s里面操作的资源实体,就是k8s的对象,可以使用yaml来声明对象。然后让k8s根据yaml的声明创建出这个对象;kubectl create/run /expose…
  • 操作 Kubernetes 对象 —— 无论是创建、修改,或者删除 —— 需要使用 Kubernetes API。比如,当使用 kubectl 命令行接口时,CLI 会执行必要的 Kubernetes API 调用
  • Kubernetes对象指的是Kubernetes系统的持久化实体,所有这些对象合起来,代表了你集群的实际情况。常规的应用里,我们把应用程序的数据存储在数据库中,Kubernetes将其数据以Kubernetes对象的形式通过 api server存储在 etcd 中,具体来说,这些数据(Kubernetes对象)描述了:
    • 集群中运行了哪些容器化应用程序(以及在哪个节点上运行)
    • 集群中对应用程序可用的资源(网络,存储等)
    • 应用程序相关的策略定义,例如,重启策略、升级策略、容错策略
    • 其他Kubernetes管理应用程序时所需要的
    • scheduler先计算应该去哪个节点部署

2.2、对象的spec和status

每一个 Kubernetes 对象都包含了两个重要的字段:
  - spec 必须由您来提供,描述了您对该对象所期望的 目标状态
  - status 只能由 Kubernetes 系统来修改,描述了该对象在 Kubernetes 系统中的 实际状态
Kubernetes通过对应的 控制器,不断地使实际状态趋向于您期望的目标状态


### 最终一致。
## etcd保存的创建资源期望的状态和最终这个资源的状态要是一致的;spec和status要最终一致
## 1、kubectl create deployment my-nginx --image=nginx
## 2、api-server保存etcd,controller-manager最终解析数据,知道集群要my-nginx一份,保
## 存到etcd
## 3、kubelet就做一件事情,spec状态和最终状态一致
## 类似于一下代码
while(true) {
	if(my-nginx.replicas != spec.replicas) {
		kubelet.startPod();
	}
}

2.3、如何写任意资源的yaml(以Pod为例)

方式一:
kubectl run my-nginx --image=nginx  # 1. 先启动一个pod
kubectl get pod my-nginx666 -oyaml  # 2. 然后在集群中挑一个同类资源,获取出他的yaml文件

方式二:
kubectl run my-nginx --image=nginx --dry-run=client -oyaml   # 只是干跑一遍,并不会创建pod

2.4、pod的yaml文件

kind: Pod  # 资源类型 kubectl api-resources: 可以获取到所有资源
apiVersion: v1  # 同一个资源有可能有多个版本, 看 kubectl api-resources提示的
metadata:  # 每一个资源定义一些元数据信息
  labels:
      run: my-tomcat
  name: my-tomcat
spec: #资源的规格(镜像名、镜像的环境变量信息等等)
  containers:
  - image: tomcat
    name: my-tomcat
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always

当您在 Kubernetes 中创建一个对象时,您必须提供

  • 该对象的 spec 字段,通过该字段描述您期望的 目标状态
  • 该对象的一些基本信息,例如名字

可以使用 kubectl 命令行创建对象,业可以编写 .yaml 格式的文件进行创建

以deployment为例子 (deployment.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
    replicas: 2  # 运行 2 个容器化应用程序副本
    template:
      metadata:
        labels:
          app: nginx
      spec:
        containers:
        - name: nginx
          image: nginx:1.7.9
          ports:
          - containerPort: 80

1、部署: kubectl apply -f deployment.yaml
2、移除: kubectl delete -f deployment.yaml
集群中所有的资源, k8s只依赖一个存储就是etcd

2.5、k8s对象yaml的结构

在这里插入图片描述
必填字段
在上述的 .yaml 文件中,如下字段是必须填写的:

  • apiVersion 用来创建对象时所使用的Kubernetes API版本
  • kind 被创建对象的类型
  • metadata 用于唯一确定该对象的元数据:包括 name 和 namespace ,如果 namespace 为空,则默认值为 default
  • spec 描述您对该对象的期望状态

不同类型的 Kubernetes,其 spec 对象的格式不同(含有不同的内嵌字段),通过 API 手册 可以查看 Kubernetes 对象的字段和描述。例如,假设您想了解 Pod 的 spec 定义,可以在 这里找到,Deployment 的 spec 定义可以在 这里 找到

https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/ 这就是我们以后要完全参照的文档

2.6、管理k8s对象

在这里插入图片描述

同一个Kubernetes对象应该只使用一种方式管理,否则可能会出现不可预期的结果

# 1、命令式
kubectl run nginx --image nginx
kubectl create deployment nginx --image nginx
apply -f : 没有就创建,有就修改
# 2、指令性
- 使用指令性的对象配置(imperative object configuration)时,需要向 kubectl 命令指定具体
的操作(create,replace,apply,delete等),可选参数以及至少一个配置文件的名字。配置文件中必须
包括一个完整的对象的定义,可以是 yaml 格式,也可以是 json 格式。
# 创建对象
kubectl create -f nginx.yaml
# 删除对象
kubectl delete -f nginx.yaml -f redis.yaml
# 替换对象
kubectl replace -f nginx.yaml
# 3、声明式
# 处理 configs 目录中所有配置文件中的Kubernetes对象,根据情况创建对象、或更新Kubernetes中已
经存在的对象。可以先执行 diff 指令查看具体的变更,然后执行 apply 指令执行变更;
kubectl diff -f configs/
kubectl apply -f configs/
# 递归处理目录中的内容:
kubectl diff -R -f configs/
kubectl apply -R -f configs/
# 移除
kubectl delete -f configs/

2.7、对象名称

Kubernetes REST API 中,所有的对象都是通过 name 和 UID 唯一性确定
可以通过 namespace + name 唯一性地确定一个 RESTFUL 对象,例如:
/api/v1/namespaces/{namespace}/pods/{name}

同一个名称空间下,同一个类型的对象,可以通过 name 唯一性确定。如果删除该对象之后,可以再
重新创建一个同名对象。
依据命名规则,Kubernetes对象的名字应该:

  • 最长不超过 253个字符
  • 必须由小写字母、数字、减号 - 、小数点 . 组成
  • 某些资源类型有更具体的要求

下面的配置文件定义了一个 name 为 nginx-demo 的 Pod,该 Pod 包含一个 name 为 nginx 的
容器:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-demo ##pod的名字
spec:
  containers:
  - name: nginx ##容器的名字
    image: nginx:1.7.9
    ports:
    - containerPort: 80 UIDs

2.8、名称空间

Kubernetes 安装成功后,默认有初始化了三个名称空间:

  • default 默认名称空间,如果 Kubernetes 对象中不定义 metadata.namespace 字段,该对象将放在此名称空间下
  • kube-system Kubernetes系统创建的对象放在此名称空间下
  • kube-public 此名称空间自动在安装集群是自动创建,并且所有用户都是可以读取的(即使是那些未登录的用户)。主要是为集群预留的,例如,某些情况下,某些Kubernetes对象应该被所有集群用户看到。

kubectl get namespaces
kubectl describe namespaces

2.9、标签和选择器

2.9.1、标签

标签(Label)是附加在Kubernetes对象上的一组名值对,其意图是按照对用户有意义的方式来标识
Kubernetes对象,同时,又不对Kubernetes的核心逻辑产生影响。标签可以用来组织和选择一组
Kubernetes对象。您可以在创建Kubernetes对象时为其添加标签,也可以在创建以后再为其添加标签。
每个Kubernetes对象可以有多个标签,同一个对象的标签的 Key 必须唯一,例如

metadata:
  labels:
    key1: value1
    key2: value2

2.9.2、标签选择器

通常来讲,会有多个Kubernetes对象包含相同的标签。通过使用标签选择器(label selector),用户/客户端可以选择一组对象。标签选择器(label selector)是 Kubernetes 中最主要的分类和筛选手段

#Job、Deployment、ReplicaSet 和 DaemonSet 同时支持基于等式的选择方式和基于集合的选择方式。
例如:
selector:
  matchLabels:
    component: redis
  matchExpressions:
    - {key: tier, operator: In, values: [cache]}
    - {key: environment, operator: NotIn, values: [dev]}

matchLabels 是一个 {key,value} 组成的 map。map 中的一个 {key,value} 条目相当于
matchExpressions 中的一个元素,其 key 为 map 的 key,operator 为 In, values 数组则只包含 value 一个元素。matchExpression 等价于基于集合的选择方式,支持的 operator 有 In、NotIn、Exists 和 DoesNotExist。当 operator 为 In 或 NotIn 时,values 数组不能为空。所有的选择条件都以 AND 的形式合并计算,即所有的条件都满足才可以算是匹配

#添加或者修改标签
kubectl label --help
# Update pod 'foo' with the label 'unhealthy' and the value 'true'.
kubectl label pods foo unhealthy=true
# Update pod 'foo' with the label 'status' and the value 'unhealthy',
overwriting any existing value.
kubectl label --overwrite pods foo status=unhealthy
# Update all pods in the namespace
kubectl label pods --all status=unhealthy
# Update a pod identified by the type and name in "pod.json"
kubectl label -f pod.json status=unhealthy
# Update pod 'foo' only if the resource is unchanged from version 1.
kubectl label pods foo status=unhealthy --resource-version=1
# Update pod 'foo' by removing a label named 'bar' if it exists.
# Does not require the --overwrite flag.
kubectl label pods foo bar-

2.10、注解annotation

字段选择器 (Field selectors )允许您根据一个或多个资源字段的值筛选 Kubernetes 资源。 下面是一些使用字段选择器查询的例子:

  • metadata.name=my-service
  • metadata.namespace!=default
  • status.phase=Pending

kubectl get pods --field-selector status.phase=Running 1

3、三个命令玩转所有的yaml写法

  • kubectl get xxx -oyaml
  • kubectl create deploy xxxxx --dry-run=client -oyaml
  • kubectl explain pod.spec.xx

写完yaml 然后 kubectl apply -f 即可

4、给vscode安装插件

搜索kubernetes , 安装 yaml 和 kubernetes template 插件即可
idea、pycharm等其他编辑器也有kubernetes插件

5、kubectl和kubelet

  • kubeadm安装的集群,二进制后来就是 yum install etcd api-server
  • 认识核心文件夹 /etc/kubernetes . 以Pod方式安装的核心组件。
    • etcd,api-server,scheduler。(安装k8s的时候,yum kubeadm kubelet kubectl)
  • 集群安装的时候,为什么只有master节点的kubectl可以操作集群
  • kubelet额外参数配置 /etc/sysconfig/kubelet;kubelet配置位置 /var/lib/kubelet/config.yaml

kubectl的所有命令参考:

kubectl controls the Kubernetes cluster manager.

 Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/

Basic Commands (Beginner):  # 初学者掌握的命令
  create        Create a resource from a file or from stdin
  expose        Take a replication controller, service, deployment or pod and expose it as a new Kubernetes service
  run           在集群中运行一个指定的镜像
  set           为 objects 设置一个指定的特征

Basic Commands (Intermediate):  # 基础命令
  explain       Get documentation for a resource
  get           显示一个或更多 resources
  edit          在服务器上编辑一个资源
  delete        Delete resources by file names, stdin, resources and names, or by resources and label selector

Deploy Commands:  # 部署用的命令
  rollout       Manage the rollout of a resource
  scale         Set a new size for a deployment, replica set, or replication controller
  autoscale     Auto-scale a deployment, replica set, stateful set, or replication controller

Cluster Management Commands:  # 集群管理的命令
  certificate   修改 certificate 资源.
  cluster-info  Display cluster information
  top           Display resource (CPU/memory) usage
  cordon        标记 node 为 unschedulable
  uncordon      标记 node 为 schedulable
  drain         Drain node in preparation for maintenance
  taint         更新一个或者多个 node 上的 taints

Troubleshooting and Debugging Commands:  # debug调试使用的命令
  describe      显示一个指定 resource 或者 group 的 resources 详情
  logs          输出容器在 pod 中的日志
  attach        Attach 到一个运行中的 container
  exec          在一个 container 中执行一个命令
  port-forward  Forward one or more local ports to a pod
  proxy         运行一个 proxy 到 Kubernetes API server
  cp            Copy files and directories to and from containers
  auth          Inspect authorization
  debug         Create debugging sessions for troubleshooting workloads and nodes

Advanced Commands:  # 高阶命令
  diff          Diff the live version against a would-be applied version
  apply         Apply a configuration to a resource by file name or stdin
  patch         Update fields of a resource
  replace       Replace a resource by file name or stdin
  wait          Experimental: Wait for a specific condition on one or many resources
  kustomize     Build a kustomization target from a directory or URL.

Settings Commands:  # 设置
  label         更新在这个资源上的 labels
  annotate      更新一个资源的注解
  completion    Output shell completion code for the specified shell (bash, zsh or fish)

Other Commands:  #其他
  alpha         Commands for features in alpha
  api-resources Print the supported API resources on the server
  api-versions  Print the supported API versions on the server, in the form of "group/version"
  config        修改 kubeconfig 文件
  plugin        Provides utilities for interacting with plugins
  version       输出 client 和 server 的版本信息

Usage:
  kubectl [flags] [options]

Use "kubectl <command> --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all commands).

6、自动补全

# 安装
yum install bash-completion
# 自动补全
echo 'source <(kubectl completion bash)' >>~/.bashrc
kubectl completion bash >/etc/bash_completion.d/kubectl
source /usr/share/bash-completion/bash_completion

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/901008.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Leetcode 0814周总结

本周刷题&#xff1a; 88, 108, 121, 219, 228, 268, 283, 303, 349, 350, 414, 448 88 合并两个有序数组 nums1{1, 2, 3 ,0, 0, 0} nums2{2, 5, 6} 合成效果&#xff1a;nums1{1, 2, 2, 3, 5, 6} 思路&#xff1a;【双指针】对两个数组设置双指针&#xff0c;依次比较哪…

transform模型讲解

目录 game是游戏 与北京在一起&#xff1a;冬奥会 transform &#xff1a;encode&#xff0c;decode 12步骤 自注意力机制就是变形金刚的拆解对照&#xff1a;生成零部件V和权重K&#xff0c;前馈神经网络进行权重调节&#xff1a;初步变形 编码器Attention就是考虑上下文信…

Spring学习笔记+SpringMvc+SpringBoot学习笔记

壹、核心概念&#xff1a; 1.1. IOC和DI IOC&#xff08;Inversion of Control&#xff09;控制反转&#xff1a;对象的创建控制权由程序转移到外部&#xff0c;这种思想称为控制反转。/使用对象时&#xff0c;由主动new产生对象转换为由外部提供对象&#xff0c;此过程种对象…

阿里云服务器扩容数据盘/系统盘小记

参考&#xff1a;扩容分区和文件系统&#xff08;Linux&#xff09; 阿里云的教程写的倒是详细&#xff0c;就是太细节&#xff0c;不利于阅读。 1 确认分区数据盘的属性 运行以下命令&#xff0c;确认待扩容云盘及其分区信息。 fdisk -lu设备&#xff1a; ①&#xff1a;云…

线性筛选素数

线性筛选素数 问题 求取范围[2,n] 之间的所有素数 方法一 方法一概述 使用数字prime[i]来标记i是否为素数。初始化prime[2…n]1。 当处理到数字i时&#xff0c;若prime[i]0&#xff0c;则代表2到i-1中有i的因子&#xff0c;因此i为合数&#xff1b;若prime[i]1&#xff0c…

美团——城市低空物流无人机的设计挑战与应对

城市低空物流无人机的设计挑战与应对 强度分析 振动影响 动力设计 噪声设计 冗余备份更加性价比&#xff0c;便宜好实现 航电系统 动力系统的冗余 电池系统的冗余 通讯系统等冗余 降落冗余 安全降落 计算高效 产线标定 底层基础库 离线系统 行业公开测评 未来展望 – 导航定…

C运行时错误——error realloc(): invalid next size

在LeetCode做题时遇到一个运行时错误&#xff0c;将引起问题的原因记录一下备忘&#xff1a; 我们在malloc或calloc等API分配内存时&#xff0c;libc库除了分配给我们在参数中设定大小的内存&#xff08;可能会有内存对齐&#xff0c;实际分配的比参数设定的要多&#xff09;&…

LeetCode算法递归类—二叉树中的最大路径和

目录 124. 二叉树中的最大路径和 - 力扣&#xff08;LeetCode&#xff09; 题解&#xff1a; 代码&#xff1a; 运行结果&#xff1a; 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该…

STM32驱动OLED显示菜单功能(附带oled硬件iic驱动代码)

while循环里面就写菜单退出 菜单进入 static int flag1; //记录你的选择//if(return_FLAG1)return_FLAG0;OLED_GotoXY(10,0);OLED_Puts("1 LED_TEST",&Font_11x18,1);OLED_GotoXY(10,20);OLED_Puts("2 USART_TEST",&Font_11x18,1);OLED_GotoXY…

传输请求时,如若选择包含其他TR,请留意……

以下是纯顾问群~微信群&#xff1a;SAP干货铺&#xff0c;请联系本人微信 sapliumeng。QQ群 &#xff1a;SAP干货铺&#xff0c; 群号&#xff1a;775662808所有群管理严格&#xff0c;严格禁止一切外来链接、招聘、广告等垃圾信息! 这是之前頔哥在群里说过的一个知识点&#…

谷歌浏览器插件篇之console Importer

前言 作为一名前端开发者&#xff0c;相信在开发实践中&#xff0c;使用过诸多第三方库。譬如&#xff1a;lodash、moment、dayjs、antd等数不胜数。 然每每使用&#xff0c;经起繁琐&#xff0c;便令人有反抗之意。其步骤如下&#xff1a;首先要在搭建好的项目里&#xff0c…

Lnton羚通如何使用OpenCV-Python进行轮廓汇总?

在图像处理和计算机视觉领域&#xff0c;轮廓&#xff08;Contour&#xff09;是指图像中连续的边缘部分形成的曲线&#xff0c;可以看作是物体的外边界或者是物体内部区域的边界。轮廓可以用于对象检测、图像分割、形状匹配等任务。轮廓可以通过在二值化图像中找到图像中白色&…

JDK动态代理与CGLIB动态代理

一、代理模式概述 1.1.生活中代理案例 房屋中介代理 客户手里面没有房源信息&#xff0c;找一个中介 商品代购 这些代购者可以去拿到比较低成本的商品&#xff0c;拥有自己的渠道 1.2.为什么要使用代理 对于消费者而言&#xff0c;可以减少成本&#xff0c;只需要关心自己…

深入理解Linux内核--页高速缓存

页高速缓存 页高速缓存(page cache)是Linux内核所使用的主要磁盘高速缓存。 在绝大多数情况下&#xff0c;内核在读写磁盘时都引用页高速缓存。 新页被追加到页高速缓存以满足用户态进程的读请求。 如果页不在高速缓存中&#xff0c;新页就被加到高速缓存中&#xff0c;然后用…

无涯教程-TensorFlow - Keras

Keras易于学习的高级Python库&#xff0c;可在TensorFlow框架上运行&#xff0c;它的重点是理解深度学习技术&#xff0c;如为神经网络创建层&#xff0c;以维护形状和数学细节的概念。框架的创建可以分为以下两种类型- 顺序API功能API 无涯教程将使用Jupyter Notebook执行和…

ArduPilot开源飞控之飞行模式

ArduPilot开源飞控之飞行模式 1. 源由2. 飞行模式-已实现3. 飞行模式-设计3.1 模式初始化(init)3.2 模式退出(exit)3.3 模式任务(run)3.4 模式切换场景3.4.1 上电初始化3.4.2 EKF FAILSAFE触发3.4.3 do_failsafe_action FAILSAFE触发3.4.4 AP_Avoidance_Copter触发3.4.5 Crash触…

03_缓存双写一致性

03——缓存双写一致性 一、缓存双写一致性 如果redis中有数据&#xff0c;需要和数据库中的值相同如果redis中无数据&#xff0c;数据库中的值要是最新值&#xff0c;且准备回写redis 缓存按照操作来分&#xff0c;可以分为两种&#xff1a; 只读缓存 读写缓存 同步直写操作…

《游戏编程模式》学习笔记(七)状态模式 State Pattern

状态模式的定义 允许对象在当内部状态改变时改变其行为&#xff0c;就好像此对象改变了自己的类一样。 举个例子 在书的示例里要求你写一个人物控制器&#xff0c;实现跳跃功能 直觉上来说&#xff0c;我们代码会这么写&#xff1a; void Heroine::handleInput(Input input…

js简介以及在html中的2种使用方式(hello world)

简介 javascript &#xff1a;是一个跨平台的脚本语言&#xff1b;是一种轻量级的编程语言。 JavaScript 是 Web 的编程语言。所有现代的 HTML 页面都使用 JavaScript。 HTML&#xff1a; 结构 css&#xff1a; 表现 JS&#xff1a; 行为 HTMLCSS 只能称之为静态网页&#xff0…

ajax-axios-url-form-serialize 插件

AJAX AJAX 概念 1.什么是 AJAX ? mdn 使用浏览器的 XMLHttpRequest 对象 与服务器通信 浏览器网页中&#xff0c;使用 AJAX技术&#xff08;XHR对象&#xff09;发起获取省份列表数据的请求&#xff0c;服务器代码响应准备好的省份列表数据给前端&#xff0c;前端拿到数据数…