KUBERNETES03_k8s对象是什么、如何管理、命名空间、代码自动补全提示_超发和超售

在结束之际,我想重申的是,学习并非如攀登险峻高峰,而是如滴水穿石般的持久累积。尤其当我们步入工作岗位之后,持之以恒的学习变得愈发不易,如同在茫茫大海中独自划舟,稍有松懈便可能被巨浪吞噬。然而,对于我们程序员而言,学习是生存之本,是我们在激烈市场竞争中立于不败之地的关键。一旦停止学习,我们便如同逆水行舟,不进则退,终将被时代的洪流所淘汰。因此,不断汲取新知识,不仅是对自己的提升,更是对自己的一份珍贵投资。让我们不断磨砺自己,与时代共同进步,书写属于我们的辉煌篇章。

需要完整版PDF学习资源

需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

①. 什么是k8s对象

  1. 集群中运行了哪些容器化应用程序(以及在哪个节点上运行)
  2. 集群中对应用程序可用的资源(网络,存储等)
  3. 应用程序相关的策略定义,例如,重启策略、升级策略、容错策略
  4. 其他Kubernetes管理应用程序时所需要的信息
  5. scheduler先计算应该去哪个节点部署
  • ④. 对象的spec和status,每一个Kubernetes对象都包含了两个重要的字段:
  1. spec必须由您来提供,描述了您对该对象所期望的目标状态
  2. status只能由Kubernetes系统来修改,描述了该对象在Kubernetes系统中的实际状态
  3. Kubernetes通过对应的 控制器,不断地使实际状态趋向于您期望的目标状态
# kubectl create deployment my-nginx --image=nginx
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
  creationTimestamp: "2022-01-03T09:18:20Z"
  generation: 1
  labels:
    app: my-nginx
  managedFields:
  - apiVersion: apps/v1
    fieldsType: FieldsV1
    manager: kubectl-create
    operation: Update
    time: "2022-01-03T09:18:20Z"
  - apiVersion: apps/v1
    fieldsType: FieldsV1
    manager: kube-controller-manager
    operation: Update
    time: "2022-01-03T09:18:39Z"
  name: my-nginx
  namespace: default
  resourceVersion: "99511"
  uid: 270afb1b-f4df-4b10-b708-53313027a805
spec: # 期望状态
  progressDeadlineSeconds: 600
  replicas: 1 # 副本数量
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: my-nginx
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: my-nginx
    spec:
      containers:
      - image: nginx # 使用这个镜像创建容器
        imagePullPolicy: Always
        name: nginx
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
status: # 当前状态
  availableReplicas: 1 # 当前集群可用的
  conditions:
  - lastTransitionTime: "2022-01-03T09:18:39Z"
    lastUpdateTime: "2022-01-03T09:18:39Z"
    message: Deployment has minimum availability.
    reason: MinimumReplicasAvailable
    status: "True"
    type: Available
  - lastTransitionTime: "2022-01-03T09:18:20Z"
    lastUpdateTime: "2022-01-03T09:18:39Z"
    message: ReplicaSet "my-nginx-6b74b79f57" has successfully progressed.
    reason: NewReplicaSetAvailable
    status: "True"
    type: Progressing
  observedGeneration: 1
  readyReplicas: 1
  replicas: 1
  updatedReplicas: 1
# 最终一致
# etcd保存的创建资源期望的状态和最终这个资源的状态要是一致的;spec和status要最终一致
# 1. kubectl create deployment my-nginx --image=nginx
# 2. pi-server保存etcd,controller-manager最终解析数据,知道集群要my-nginx一份,保存到etcd
# 3. kubelet就做一件事情,spec状态和最终状态一致
while(true){ if(my-nginx.replicas != spec.replicas) { kubelet.startPod(); } }

②. 描述k8s的对象

  • ①. 如何会写任意资源的yaml,比如Pod
    (kubectl run my-nginx666 --image=nginx #启动一个Pod)
  1. kubectl get pod my-nginx666 -oyaml集群中挑一个同类资源,获取出他的yaml
  2. kubectl run my-tomcat --image=tomcat --dry-run -oyaml 干跑一遍
  • ②. 当您在Kubernetes中创建一个对象时,您必须提供
  1. 该对象的spec字段,通过该字段描述您期望的目标状态,该对象的一些基本信息,例如名字
  2. 可以使用 kubectl 命令行创建对象,也可以编写.yaml 格式的文件进行创建
[root@k8smaster ~]# kubectl run my-tomcat --image=tomcat --dry-run -oyaml # dry-run过期了,可以使用dry-run=client
[root@k8smaster ~]# kubectl api-resources | grep pod
# tomcat干跑
#(1). apiVersion和kind称为typeMeta(基本信息)
#(2). metadata成为元数据,ObjectMeta
apiVersion: v1 # 同一个资源有可能有多个版本。看 kubectl api-resources提示的
kind: Pod # 资源类型 kubectl api-resources:可以获取到所有资源
metadata: # 每一个资源定义一些元数据信息
  labels:
    run: my-tomcat
  name: my-tomcat # 指定资源的名字
spec: # 资源的规格(镜像名、镜像的环境变量信息等等)
  containers: # 指定要启动一个什么样的容器
  - image: tomcat # 容器的镜像
    name: my-tomcat # 容器的名字
    resources: {} # 容器的资源信息(后面详解)
  dnsPolicy: ClusterFirst # dns的策略信息(后面详解)
  restartPolicy: Always
# 以上是资源的完整规格描述部分 以上是我们必须会编写的
# status不用我们写,是k8s集群实时更新的状态信息,只要资源变化,kubelet会请求api-server保存最新的资源状态信息
status: {} 

在这里插入图片描述

  • ③. 在想要创建的Kubernetes对象对应的.yaml文件中,需要配置如下的字段(必须字段)
  1. apiVersion:创建该对象所使用的Kubernetes API的版本
  2. kind:想要创建的对象的类别
  3. metadata: 用于唯一确定该对象的元数据:包括name和namespace,如果namespace为空,则默认值为default
  4. spec:你所期望的该对象的状态
  5. 不同类型的 Kubernetes,其spec对象的格式不同(含有不同的内嵌字段),通过API手册可以查看 Kubernetes对象的字段和描述。例如,假设您想了解Pod的spec定义,可以在这里找到,Deployment的spec定义可以在这里找到
    在这里插入图片描述

③. 管理k8s的对象

  • ①. 同一个Kubernetes对象应该只使用一种方式管理,否则可能会出现不可预期的结果
    在这里插入图片描述
  • ②. kubectl create -f 没有会创建,有的话会报错
    kubectl apply -f 没有会创建,有的话不会报错

④. k8s的名称空间

  • ①. Namespace:名称空间,用来对集群资源进行隔离划分。默认只隔离资源,不隔离网络
    (同一名称下的资源可以共享,不同名称空间下的资源不能共享,但是不同名称空间下的网络可以互通)
  • ②. 关于Namespace中基本的命令
    kubectl get ns:查看命名空间
    kubectl create ns hello:创建命名空间
    kubectl delete ns hello:删除命名空间
  • ③. 使用yaml的文件创建命名空间(下面创建了hello的命名空间),hello.yaml
    如果要删除命名空间:kubectl delete -f hello.yaml
[root@k8smaster k8syaml]# kubectl create ns hello--dry-run=client -oyaml 
apiVersion: v1
kind: Namespace
metadata:
  name: hello # 名称空间的名字
spec: {}
status: {}

  • ④. 使用kubectl get pods:查看的是默认(default命名空间)下的内容
[root@k8s-master~]kubectl get pods
No resources found in default namespace

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

⑤. 给k8s对象打标签

  • ①. 通过命令行的方式打标签
[root@k8smaster k8syaml]# kubectl get pod
NAME      READY   STATUS    RESTARTS   AGE
mynginx   1/1     Running   0          34s
[root@k8smaster k8syaml]# kubectl label pod mynginx name=tangzhi # 将mynginx进行打标签
pod/mynginx labeled
[root@k8smaster k8syaml]# kubectl get pod --show-labels # 查看pod的标签
NAME      READY   STATUS    RESTARTS   AGE   LABELS
mynginx   1/1     Running   0          91s   name=tangzhi,run=mynginx
[root@k8smaster k8syaml]# kubectl label pod mynginx name-  # 将标签name进行删除
pod/mynginx labeled
[root@k8smaster k8syaml]# kubectl get pod --show-labels
NAME      READY   STATUS    RESTARTS   AGE    LABELS
mynginx   1/1     Running   0          119s   run=mynginx

在这里插入图片描述在这里插入图片描述

  • ②. 通过yaml的方式打标签
# 自己给pod的yaml文件的方式打标签
# pod带上名称空间和label的
kind: Pod
apiVersion: v1
metadata:
  name: my-nginx-labels
  namespace: hello # 在hello命名空间下创建pod
  labels:
     aa: bb
     bb: dd
spec:  # 指定规格信息
  containers:  # 指定要启动一个什么样的容器
  - image: nginx   #指定镜像
    name: my-nginx  #容器的名字

⑥. 认识kubectl和kubelet

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!

需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以点击这里获取

24970)]
[外链图片转存中…(img-qJzZlRHY-1715875124971)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!

需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以点击这里获取

  • 12
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值