k8s入门实战(Pod-Label-Deployment)

news2024/12/27 13:29:24

k8s入门实战(Pod-Label-Deployment)

Pod

Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。

k8s架构图:
在这里插入图片描述

k8s集群启动后,集群中各个组件也是以pod方式运行

[root@master ~]# kubectl get pod -n kube-system
NAME                             READY   STATUS    RESTARTS   AGE
coredns-6955765f44-7jflq         1/1     Running   1          17h
coredns-6955765f44-9h9s9         1/1     Running   1          17h
etcd-master                      1/1     Running   1          17h
kube-apiserver-master            1/1     Running   1          17h
kube-controller-manager-master   1/1     Running   1          17h
kube-proxy-gz5r2                 1/1     Running   1          17h
kube-proxy-hk8d5                 1/1     Running   1          17h
kube-proxy-vln9d                 1/1     Running   1          17h
kube-scheduler-master            1/1     Running   1          17h

创建并运行

k8s没有提供单独命令运行,是通过pod控制器运行

 #首先查看名称空间
[root@master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   17h
dev               Active   80m   #把pod运行在这个ns里
kube-flannel      Active   17h
kube-node-lease   Active   17h
kube-public       Active   17h
kube-system       Active   17h 

#命令格式 kubectl run (pod控制器名称)[参数]
#--image 指定pod镜像 --port 指定端口 --namespace 指定名称空间


[root@master ~]# kubectl run nginx --image=nginx:1.17.1 --port=80 --namespace dev
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/nginx created 

#查询pod
 #这个pod刚刚部署到node1节点 启动了71s
[root@master ~]# kubectl get pod -n dev -o wide
NAME                     READY   STATUS    RESTARTS   AGE   IP           NODE    NOMINATED NODE   READINESS GATES
nginx-64777cd554-p5nvj   1/1     Running   0          71s   10.244.1.5   node1   <none>           <none>
nginxpod                 1/1     Running   1          85m   10.244.2.8   node2   <none>           <none>

通过刚刚创建的pod IP和端口访问页面

[root@master ~]# curl 10.244.1.5:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

删除pod

#查看pod
[root@master ~]# kubectl get pod -n dev
NAME                     READY   STATUS    RESTARTS   AGE
nginx-64777cd554-p5nvj   1/1     Running   0          13m
nginxpod                 1/1     Running   1          98m

#查看pod控制器
[root@master ~]# kubectl get deployment -n dev
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   1/1     1            1           15m

 #如果删除了pod控制器 pod就自动删除  如果仅仅删除了pod pod控制器 
#还会给你创建一个新的

[root@master ~]# kubectl delete  deployment nginx -n dev
deployment.apps "nginx" deleted
[root@master ~]# kubectl get pod -n dev
NAME       READY   STATUS    RESTARTS   AGE
nginxpod   1/1     Running   1          102m

配置操作

创建pod-nginx.yaml

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: dev
spec:
  containers:
  - image: nginx:1.17.1
    name: pod
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP
#运行pod
[root@master ~]# kubectl create -f pod-nginx.yaml
pod/nginx created 


#查询
[root@master ~]# kubectl get pod -n dev
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          51s 


#删除pod
[root@master ~]# kubectl delete -f pod-nginx.yaml
pod "nginx" deleted
[root@master ~]# kubectl get pod -n dev
No resources found in dev namespace.

Label

标签(Labels) 是附加到 Kubernetes 对象(比如 Pod)上的键值对。 标签旨在用于指定对用户有意义且相关的对象的标识属性,但不直接对核心系统有语义含义。 标签可以用于组织和选择对象的子集。标签可以在创建时附加到对象,随后可以随时添加和修改。 每个对象都可以定义一组键/值标签。每个键对于给定对象必须是唯一的。

简单来说就是一种标识选择机制

  • 一个Label会以key/value键值对形式附加到各种资源对象上

  • 一个资源可以打上多个标签,一个标签可以给多个资源对象定义

  • Label通常资源对象定义时确定,也可以在资源运行时定义

"metadata": {
  "labels": {
    "key1" : "value1",
    "key2" : "value2"
  }
}

标签定义完后还有注意标签选择

Label Selector

标签不支持唯一性。通常,我们希望许多对象携带相同的标签。

通过标签选择算符,客户端/用户可以识别一组对象。标签选择算符是 Kubernetes 中的核心分组原语。

API 目前支持两种类型的选择算符:基于等值的基于集合的。 标签选择算符可以由逗号分隔的多个需求组成。 在多个需求的情况下,必须满足所有要求,因此逗号分隔符充当逻辑&&)运算符。

空标签选择算符或者未指定的选择算符的语义取决于上下文, 支持使用选择算符的 API 类别应该将算符的合法性和含义用文档记录下来。

基于等值基于不等值的需求允许按标签键和值进行过滤。 匹配对象必须满足所有指定的标签约束,尽管它们也可能具有其他标签。 可接受的运算符有 ===!= 三种。 前两个表示相等(并且是同义词),而后者表示不相等。例如:

environment = production
tier != frontend

前者选择所有资源,其键名等于 environment,值等于 production。 后者选择所有资源,其键名等于 tier,值不同于 frontend,所有资源都没有带有 tier 键的标签。 可以使用逗号运算符来过滤 production 环境中的非 frontend 层资源:environment=production,tier!=frontend

基于等值的标签要求的一种使用场景是 Pod 要指定节点选择标准。 例如,下面的示例 Pod 选择带有标签 “accelerator=nvidia-tesla-p100”。

apiVersion: v1
kind: Pod
metadata:
  name: cuda-test
spec:
  containers:
    - name: cuda-test
      image: "registry.k8s.io/cuda-vector-add:v0.1"
      resources:
        limits:
          nvidia.com/gpu: 1
  nodeSelector:
    accelerator: nvidia-tesla-p100

基于集合的标签需求允许你通过一组值来过滤键。 支持三种操作符:innotinexists(只可以用在键标识符上)。例如:

environment in (production, qa)
tier notin (frontend, backend)
partition
!partition
  • 第一个示例选择了所有键等于 environment 并且值等于 production 或者 qa 的资源。
  • 第二个示例选择了所有键等于 tier 并且值不等于 frontend 或者 backend 的资源,以及所有没有 tier 键标签的资源。
  • 第三个示例选择了所有包含了有 partition 标签的资源;没有校验它的值。
  • 第四个示例选择了所有没有 partition 标签的资源;没有校验它的值。

命令方式

#根据上文中的ymal文件,创建一个pod  
[root@master ~]# kubectl create -f pod-nginx.yaml
pod/nginx created
[root@master ~]# kubectl get pod -n dev
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          21s
[root@master ~]# kubectl get pod -n dev --show-labels
NAME    READY   STATUS    RESTARTS   AGE   LABELS
nginx   1/1     Running   0          49s   <none>


#给pod打标签

[root@master ~]# kubectl label pod nginx -n dev version=1.0
pod/nginx labeled
[root@master ~]# kubectl get pod -n dev --show-labels
NAME    READY   STATUS    RESTARTS   AGE    LABELS
nginx   1/1     Running   0          2m7s   version=1.0


[root@master ~]# kubectl get pod -n dev --show-labels
NAME    READY   STATUS    RESTARTS   AGE     LABELS
nginx   1/1     Running   0          2m56s   tier=back,version=1.0

#更新标签
[root@master ~]# kubectl label pod nginx -n dev version=2.0 --overwrite
pod/nginx labeled
[root@master ~]# kubectl get pod -n dev --show-labels
NAME    READY   STATUS    RESTARTS   AGE     LABELS
nginx   1/1     Running   0          4m36s   tier=back,version=2.0 


#更改yaml文件,再新建一个pod
[root@master ~]# vim pod-nginx.yaml
[root@master ~]# cat pod-nginx.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx1
  namespace: dev
spec:
  containers:
  - image: nginx:1.17.1
    name: pod
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP


[root@master ~]# kubectl create -f pod-nginx.yaml
pod/nginx1 created 

#打标签

[root@master ~]# kubectl create -f pod-nginx.yaml
pod/nginx1 created


[root@master ~]# kubectl get pods -n dev --show-labels
NAME     READY   STATUS    RESTARTS   AGE     LABELS
nginx    1/1     Running   0          7m55s   tier=back,version=2.0
nginx1   1/1     Running   0          105s    version=1.0

#筛选
[root@master ~]# kubectl get pods -l "version=2.0" -n dev --show-labels
NAME    READY   STATUS    RESTARTS   AGE     LABELS
nginx   1/1     Running   0          9m55s   tier=back,version=2.0
[root@master ~]# kubectl get pods -l "version!=2.0" -n dev --show-labels
NAME     READY   STATUS    RESTARTS   AGE     LABELS
nginx1   1/1     Running   0          3m59s   version=1.0 

#删除标签

[root@master ~]# kubectl label pod nginx -n dev tier-
pod/nginx labeled
[root@master ~]# kubectl get pods -l "version=2.0" -n dev --show-labels
NAME    READY   STATUS    RESTARTS   AGE   LABELS
nginx   1/1     Running   0          13m   version=2.0

配置文件添加label

更新yaml文件内容

[root@master ~]# vim pod-nginx.yaml
[root@master ~]# cat pod-nginx.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: dev
  labels:
    version: "3.0"
    env: "test"
spec:
  containers:
  - image: nginx:1.17.1
    name: pod
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP
[root@master ~]# kubectl apply -f pod-nginx.yaml
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
pod/nginx configured
[root@master ~]# kubectl get pods  -n dev --show-labels
NAME     READY   STATUS    RESTARTS   AGE   LABELS
nginx    1/1     Running   0          58m   env=test,version=3.0
nginx1   1/1     Running   0          52m   version=1.0

Deployment

Pod控制器,用于Pod管理,保障Pod资源始终保存可预期状态

命令操作

# 命令格式: kubectl run deployment名称  [参数] 
# --image  指定pod的镜像
# --port   指定端口
# --replicas  指定创建pod数量
# --namespace  指定na
mespace

[root@master ~]# kubectl run nginx --image=nginx:1.17.1 --port=80 --replicas=3 --namespace=dev
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/nginx created 


[root@master ~]# kubectl get deployment,pods -n dev
NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx   3/3     3            3           6s

NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-64777cd554-2txpz   1/1     Running   0          6s
pod/nginx-64777cd554-5j686   1/1     Running   0          6s
pod/nginx-64777cd554-z5psb   1/1     Running   0          6s  

#查看控制器信息

[root@master ~]# kubectl describe deploy nginx -n dev
Name:                   nginx
Namespace:              dev
CreationTimestamp:      Tue, 23 May 2023 02:59:31 -0400
Labels:                 run=nginx
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               run=nginx
Replicas:               3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  run=nginx
  Containers:
   nginx:
    Image:        nginx:1.17.1
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   nginx-64777cd554 (3/3 replicas created)
Events:
  Type    Reason             Age    From                   Message
  ----    ------             ----   ----                   -------
  Normal  ScalingReplicaSet  5m10s  deployment-controller  Scaled up replica set nginx-64777cd554 to 3
#删除
[root@master ~]# kubectl delete  deploy nginx -n dev
deployment.apps "nginx" deleted

配置操作

创建一个yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: dev
spec:
  replicas: 3
  selector:
    matchLabels:
      run: nginx
  template:
    metadata:
      labels:
        run: nginx
    spec:
      containers:
      - image: nginx:1.17.1
        name: nginx
        ports:
        - containerPort: 80
          protocol: TCP          
[root@master ~]# vim deploy-nginx.yaml
[root@master ~]# cat deploy-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: dev
spec:
  replicas: 3
  selector:
    matchLabels:
      run: nginx
  template:
    metadata:
      labels:
        run: nginx
    spec:
      containers:
      - image: nginx:1.17.1
        name: nginx
        ports:
        - containerPort: 80
          protocol: TCP
[root@master ~]# kubectl create -f deploy-nginx.yaml
deployment.apps/nginx created
[root@master ~]# kubectl get deployment,pods -n dev
NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx   3/3     3            3           24s

NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-64777cd554-69c7c   1/1     Running   0          24s
pod/nginx-64777cd554-g4cpm   1/1     Running   0          24s
pod/nginx-64777cd554-zjzsx   1/1     Running   0          24s
  
#删除

[root@master ~]# kubectl delete -f deploy-nginx.yaml
deployment.apps "nginx" deleted
[root@master ~]# kubectl get deployment,pods -n dev #删除需要时间 正在删除中
NAME                         READY   STATUS        RESTARTS   AGE
pod/nginx-64777cd554-g4cpm   0/1     Terminating   0          78s
pod/nginx-64777cd554-zjzsx   0/1     Terminating   0          78s
[root@master ~]# kubectl get deployment,pods -n dev
NAME                         READY   STATUS        RESTARTS   AGE
pod/nginx-64777cd554-g4cpm   0/1     Terminating   0          86s
[root@master ~]# kubectl get deployment,pods -n dev
No resources found in dev namespace.


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

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

相关文章

RAR压缩文件如何转换成ZIP格式?

压缩文件有多种不同的格式&#xff0c;有时候因为需求不同&#xff0c;我们需要把RAR压缩文件转换成ZIP格式&#xff0c;那要如何操作呢&#xff1f;下面小编分享2种简单的方法。 方法一&#xff1a; 如果需要转换的RAR压缩包不是很多&#xff0c;我们可以直接把文件名字后缀“…

Spring Boot日志系统大揭秘:从零开始学习Spring Boot日志:常见问题解答和最佳实践

一. 关于 Spring Boot 日志的使用 Spring Boot 日志机制和工具用于记录应用程序的日志信息和追踪应用程序的执行过程。它集成了常用的日志框架&#xff0c;如 Log4j、logback、Java Util Logging等&#xff0c;并提供简单易用的配置方式&#xff0c;让开发人员可以方便地监控应…

【web基础与HTTP协议】

目录 一、Web基础1、域名1.1、域名的概述1.2、域名空间结构1.3、域名注册 2、网页的概念2.1、网页的概述2.2、网址的概述1、URI和URL的区别 二、HTML概述1、HTML 基本标签2、HTML 文件结构如下3、头标签中常用标签4、内容标签中常用标签 三、静态网页与动态网页3.1、目前常用的…

day4--链表内指定区间反转

迭代方法 1. 第m个节点的前一个节点pre和第n个节点&#xff1b; 2. 将第m个节点到第n个节点的链表部分反转&#xff1b; 3. 将pre节点的next指向反转后链表的头节点&#xff0c;将反转后链表的尾节点的next指向n1节点。 /*** struct ListNode {* int val;* struct ListNode…

hive如何实现oracle中复杂的update sql

hive3.1有update语法&#xff0c;但是目前没用还是采用的非事务表&#xff0c;所以我们用其他的办法来解决hive的update问题 简单的update oracle update student set namecclovezbf where id1 hive insert overwrite table student select id, if(id1,cclovezbf,name) n…

【正点原子STM32连载】 第十九章 窗口门狗(WWDG)实验摘自【正点原子】STM32F103 战舰开发指南V1.2

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第十九…

Unreal Niagara粒子入门2

本次学习一下如何将Niagara参数暴露给蓝图、材质编辑器。 1.暴露参数给蓝图 首先在左侧Parmeters参数面板的User Exposed处创建参数&#xff1a; 然后将参数拖入到想要绑定的粒子字段上&#xff0c;例如这里绑定给粒子发射数&#xff1a; 在调用粒子时&#xff0c;可通过Se…

【Java EE 初阶】网络编程套接字UDP

目录 1.为什么需要网络编程&#xff1f; 2.什么是网络编程&#xff1f; 3.发送端和接收端 4.请求和响应 5.客户端和服务端 6.如何进行网络编程&#xff08;Socket套接字&#xff09; 1.如何进行网络编程 2.TCP与UDP的区别 1.流套接字&#xff1a;使用传输层TCP协议 2.…

5月跳槽会有风险,不跳也会有?

今天讲讲跳槽。 说实话跳槽是为了寻求更好的发展&#xff0c;但在跳槽前我们也不能确定下家就是更好的归宿&#xff0c;这就更加需要我们审慎地去对待&#xff0c;不能盲目跳槽。 其次&#xff0c;我们离职和跳槽&#xff0c;其中的原因很大一部分是目前薪资不符合预期。 那…

Kyligence 客户案例招商银行批发业务分析平台获评金融数字化最佳实践案例

近日&#xff0c;“2023 爱分析金融数字化最佳实践案例”评选结果正式揭晓。Kyligence 携手招商银行申报的“招商银行‘火眼’批发业务分析平台”项目经过领先性、案例创新性、应用成熟度、价值创造等维度综合评选&#xff0c;最终获评“金融数字化最佳实践案例”。 招商银行“…

阿里 P9 推荐的 Spring 领域巅峰之作,直接颠覆了我对 Spring 的认知

写在前面 你第一次接触 spring 框架是在什么时候&#xff1f;相信很多人和我一样&#xff0c;第一次了解 spring 都不是做项目的时候用到&#xff0c;而是在网上看到或者是听到过一个叫做 spring 的框架&#xff0c;这个框架号称完爆之前的 structs 和 structs2&#xff0c;吸…

Jupyter设置指定的python环境

Jupyter设置指定的python环境 Jupyter在虚拟环境中启动 按理说在命令行执行如下命令 conda activate 环境名称激活一个conda环境&#xff0c;再打开jupyter&#xff0c;输入如下命令 jupyter notebook默认的python环境应该是刚刚激活的那个&#xff0c;但是我发现在window上…

git代码回滚是使用reset还是revert

时光不能回退&#xff0c;Git却允许我们改变历史。 想要让Git回退历史&#xff0c;有以下步骤&#xff1a; 使用git log命令&#xff0c;查看分支提交历史&#xff0c;确认需要回退的版本 使用git reset --hard commit_id命令&#xff0c;进行版本回退 使用git push origin命…

不需要策略模式也能避免满屏if/else

满屏if/else java 复制代码 public static void main(String[] args) { int a 1; if(a 1){ System.out.println("执行a1的逻辑"); }else if (a 2){ System.out.println("执行a2的逻辑"); }else if (a 3){ System.out.println("执行a3的逻辑&quo…

基于apache paimon实时数仓全增量一体实时入湖

用例简介 Apache Paimon&#xff08;以下简称 Paimon&#xff09;作为支持实时更新的高性能湖存储&#xff0c;本用例展示了在千万数据规模下使用全量 增量一体化同步 MySQL 订单表到 Paimon明细表、下游计算聚合及持续消费更新的能力。整体流程如下图所示&#xff0c;其中 …

R语言实践——rWCVP:世界维管植物名录的R包

rWCVP&#xff1a;世界维管植物名录的R包 介绍1. 参照github安装与简单例子1.1 安装rWCVP1.2 安装rWCVPdata1.3 github的例子 2. rWCVP原始文献阅读2.1 前言&#xff08;背景&#xff09;2.2 功能概要2.2.1 名称匹配&#xff08;wcvp_match_names(), wcvp_match_exact(), wcvp …

ChatGPT:你真的了解网络安全吗?浅谈攻击防御进行时之网络安全新定义

ChatGPT&#xff1a;你真的了解网络安全吗&#xff1f;浅谈网络安全攻击防御进行时 网络安全新定义总结 ChatGPT&#xff08;全名&#xff1a;Chat Generative Pre-trained Transformer&#xff09;&#xff0c;美国OpenAI 研发的聊天机器人程序&#xff0c;是人工智能技术驱动…

在字节跳动做了6年测试,5月无情被辞,想给划水的兄弟提个醒

先简单交代一下背景吧&#xff0c;某不知名 985 的本硕&#xff0c;17 年毕业加入字节&#xff0c;以“人员优化”的名义无情被裁员&#xff0c;之后跳槽到了有赞&#xff0c;一直从事软件测试的工作。之前没有实习经历&#xff0c;算是6年的工作经验吧。 这6年之间完成了一次…

API接口测试—详情版(拼多多根据ID取商品详情)

一、为什么要做接口测试 做接口测试的原因主要有以下几个方面&#xff1a; 1. 确保接口功能正确性&#xff1a;接口是不同软件系统或者不同模块之间的数据传输和交互的通道&#xff0c;通过接口测试能够确保不同系统或者模块之间传递的信息准确无误&#xff0c;从而保证了整个…

微信小程序点击icon实现分享功能

1.小程序分享功能实现方式 小程序分享功能有两种方式&#xff0c;监听用户点击页面内转发按钮&#xff08; 组件 open-type“share”&#xff09;或右上角菜单“转发”按钮的行为&#xff0c;并自定义转发内容。 使用微信小程序的分享功能需要定义onShareAppMessage(Object obj…