k8s之pod管理_pod 切换root,Linux运维驱动工程师面试题

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

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

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

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

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

如果你需要这些资料,可以添加V获取:vip1024b (备注运维)
img

正文

这时我们发现容器内的ip和容器外的ip相同
在这里插入图片描述
再次进入容器我们访问刚才myapp的ip,查看结果

[root@server2 ~]# kubectl attach demo -i -t
/ # curl 10.244.2.21

在这里插入图片描述

4 删除pod

删除pod的命令

[root@server2 ~]# kubectl delete pod nginx

使用下面命令可以查看正在运行的pod的详细信息

[root@server2 ~]# kubectl describe pod demo 

在这里插入图片描述

5.查看日志的命令

[root@server2 ~]# kubectl logs demo

6 通过控制器创建pod

一般我们不会使用刚才演示的那种单独创建的方式

[root@server2 ~]# kubectl create deployment nginx --image=myapp:v1
[root@server2 ~]# kubectl get all

在这里插入图片描述

这里如果我们进行删除的话,它是不会直接被删除的,他会删除之后,自动重新创建出来一个新的副本。只是随机id发生变化

二、Pod扩容与缩容

[root@server2 ~]# kubectl scale deployment --replicas=2 nginx
[root@server2 ~]# kubectl get pod -o wide

在这里插入图片描述

三、 service(微服务)

service是一个抽象概念,定义了一个服务的多个pod逻辑合集和访问pod的策略,一般把service称为微服务。

1.创建service

[root@server2 ~]# kubectl expose deployment nginx --port=80
[root@server2 ~]# kubectl get svc
[root@server2 ~]# curl 10.100.138.138

此时pod客户端可以通过service的名称访问后端的两个Pod
ClusterIP: 默认类型,自动分配一个仅集群内部可以访问的虚拟IP
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2 查看svc详细信息

[root@server2 ~]# kubectl describe svc nginx

这里的ip对应pod的副本ip
在这里插入图片描述
会根据副本数自动实现副本负载均衡

3.修改暴露类型

NodePort: 在ClusterIP基础上为Service在每台机器上绑定一个端口,这样就可以通过 NodeIP:NodePort 来访问该服务

[root@server2 ~]# kubectl edit svc nginx

将类型改成NodePort
在这里插入图片描述

[root@server2 ~]# kubectl get svc 

在这里插入图片描述
在外部访问时,用的是节点ip+端口访问

[root@Sun_s Desktop]# curl 172.25.1.2:30224/hostname.html

8

4 更新及回滚pod镜像

[root@server2 ~]# kubectl set image deployment nginx myapp=myapp:v2 --record #更新
[root@server2 ~]# kubectl rollout undo deployment nginx --to-revision=1 #回滚
[root@server2 ~]# kubectl rollout history deployment nginx //查看历史版本
[root@server2 ~]# curl 10.100.138.138

在这里插入图片描述

四、资源清单

1.清单格式

清单格式
apiVersion: group/version  //指明api资源属于哪个群组和版本,同一个组可以有多个版本
$ kubectl api-versions //查询命令
kind: //标记创建的资源类型,k8s主要支持以下资源类别
Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Cronjob
metadata: //元数据
name: //对像名称
namespace: //对象属于哪个命名空间
labels: //指定资源标签,标签是一种键值数据
spec: //定义目标资源的期望状态

2. 参数信息

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

3 查看帮助

[root@server2 ~]# kubectl api-versions ## 查看所有api的版本信息
[root@server2 ~]# kubectl explain pod.spec.containers ## pod清单帮助 一层一层看

在这里插入图片描述

4 删除之前创建的

[root@server2 ~]# kubectl delete deployments.apps nginx 
[root@server2 ~]# kubectl delete svc nginx

5 编写创建pod 的api文件

[root@server2 ~]# vim pod.yml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: default
spec:
  containers:
  - name: nginx
    image: myapp:v1
    imagePullPolicy: IfNotPresent
[root@server2 ~]# kubectl apply -f pod.yml
[root@server2 ~]# kubectl get pod

在这里插入图片描述

6 删除

[root@server2 ~]# kubectl delete -f pod.yml

在这里插入图片描述

7.编写创建deployment api文件

[root@server2 ~]# vim deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      run: nginx
  template:
    metadata:
      labels:
        run: nginx
    spec:
      containers:
      - name: nginx
        image: myapp:v1
        imagePullPolicy: IfNotPresent
[root@server2 ~]# kubectl apply -f deployment.yml
[root@server2 ~]# kubectl get pod

在这里插入图片描述

8.将运行中的pod转换成yml格式

[root@server2 ~]# kubectl get pod nginx-b5548c7c4-4phr9 -o yaml

在这里插入图片描述

9 优化

[root@server2 ~]# vim deployment.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      run: nginx
  template:
    metadata:
      labels:
        run: nginx
    spec:
      #nodeSelector:
      # kubernetes.io/hostname: server4 
      nodeName: server3  #增加标签选择器
      #hostNetwork: true #使用主机网络,注意端口不能冲突
      containers:
      - name: nginx
        image: myapp:v1
        imagePullPolicy: IfNotPresent
        resources:
          requests:
            cpu: 100m  #最小限制;十分之一cpu资源,也可以写成0.1
            memory: 70Mi
          limits:  #上限,超出被控制器杀死
            cpu: 0.5
            memory: 512Mi

[root@server2 ~]# kubectl apply -f deployment.yml
[root@server2 ~]# kubectl get pod -o wide
[root@server2 ~]# kubectl describe pod 

全部在server3节点上
在这里插入图片描述
在这里插入图片描述

10.自主式Pod资源清单

在之前的基础上再加一个容器进来

      containers:
      - name: nginx
        image: myapp:v1
        imagePullPolicy: IfNotPresent
        resources:
          requests:
            cpu: 100m  #最小限制;十分之一cpu资源,也可以写成0.1
            memory: 70Mi
          limits:  #上限,超出被控制器杀死
            cpu: 0.5
            memory: 512Mi
      - name: busyboxplus
        image: busyboxplus
        imagePullPolicy: IfNotPresent
        stdin: true
        tty: true
[root@server2 ~]# kubectl apply -f deployment.yml
[root@server2 ~]# kubectl get pod

这时我们看到有两个容器
在这里插入图片描述
运行的时候使用-c 指定容器

[root@server2 ~]# kubectl attach nginx-585f596658-gcd89 -c busyboxplus -it
If you don't see a command prompt, try pressing enter.
/ # curl localhost
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

11.标签

主要在控制器中使用,可以在节点上或pod打标签

[root@server2 ~]# kubectl get pod --show-labels #查看标签
[root@server2 ~]# kubectl label pod nginx-585f596658-gcd89 version=v1 ## 打标签
[root@server2 ~]# kubectl label pod nginx-585f596658-gcd89 version=v2 --overwrite ##更改标签
[root@server2 ~]# kubectl get pod -l version ##过滤标签

在这里插入图片描述
在这里插入图片描述
节点标签选择器

$ kubectl label nodes server2 disktype=ssd
node/server2 labeled
$ kubectl get nodes -l disktype
NAME      STATUS   ROLES    AGE   VERSION
server2   Ready    <none>   6d    v1.17.2

在yaml文件中增加标签选择器

nodeSelector:
  disktype: ssd

五、pod的生命周期

在这里插入图片描述
参考网站:kubernetes官网
在这里插入图片描述
(1)Pod 可以包含多个容器,应用运行在这些容器里面,同时 Pod 也可以有一个或多个先于应用容器启动的 Init 容器。

(2)Init 容器与普通的容器非常像,除了如下两点:

  • 它们总是运行到完成。
  • Init 容器不支持 Readiness,因为它们必须在 Pod 就绪之前运行完成,每个 Init 容器必须运行成功,下一个才能够运行。

(3)如果 Pod 的 Init 容器失败,Kubernetes 会不断地重启该 Pod,直到 Init 容器成功为止。然而,如果 Pod 对应的 restartPolicy 值为 Never,它不会重新启动。

Init 容器能做什么?

Init 容器可以包含一些安装过程中应用容器中不存在的实用工具或个性化代码。
Init 容器可以安全地运行这些工具,避免这些工具导致应用镜像的安全性降低。
应用镜像的创建者和部署者可以各自独立工作,而没有必要联合构建一个单独的应用镜像。
Init 容器能以不同于Pod内应用容器的文件系统视图运行。因此,Init容器可具有访问 Secrets 的权限,而应用容器不能够访问。
由于 Init 容器必须在应用容器启动之前运行完成,因此 Init 容器提供了一种机制来阻塞或延迟应用容器的启动,直到满足了一组先决条件。一旦前置条件满足,Pod内的所有的应用容器会并行启动。

使用启动探测器保护慢启动容器

[root@server2 ~]# vim init.yml
apiVersion: v1
kind: Pod
![](https://img-blog.csdnimg.cn/img_convert/9a8cb5f8c0ec69e6499adead0da6e95b.png)



最全的Linux教程,Linux从入门到精通

======================

1.  **linux从入门到精通(第2版)**

2.  **Linux系统移植**

3.  **Linux驱动开发入门与实战**

4.  **LINUX 系统移植 第2版**

5.  **Linux开源网络全栈详解 从DPDK到OpenFlow**



![华为18级工程师呕心沥血撰写3000页Linux学习笔记教程](https://img-blog.csdnimg.cn/img_convert/59742364bb1338737fe2d315a9e2ec54.png)



第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。



![华为18级工程师呕心沥血撰写3000页Linux学习笔记教程](https://img-blog.csdnimg.cn/img_convert/9d4aefb6a92edea27b825e59aa1f2c54.png)



**本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。**

> 需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论




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

**需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注运维)**
![img](https://img-blog.csdnimg.cn/img_convert/b2d11341c459d15bc13f7bb1a090a46e.jpeg)

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



![华为18级工程师呕心沥血撰写3000页Linux学习笔记教程](https://img-blog.csdnimg.cn/img_convert/9d4aefb6a92edea27b825e59aa1f2c54.png)



**本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。**

> 需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论




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

**需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注运维)**
[外链图片转存中...(img-dBaQD1Eo-1713140767994)]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值