赞
踩
先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注运维)
这时我们发现容器内的ip和容器外的ip相同
再次进入容器我们访问刚才myapp的ip,查看结果
[root@server2 ~]# kubectl attach demo -i -t
/ # curl 10.244.2.21
删除pod的命令
[root@server2 ~]# kubectl delete pod nginx
使用下面命令可以查看正在运行的pod的详细信息
[root@server2 ~]# kubectl describe pod demo
[root@server2 ~]# kubectl logs demo
一般我们不会使用刚才演示的那种单独创建的方式
[root@server2 ~]# kubectl create deployment nginx --image=myapp:v1
[root@server2 ~]# kubectl get all
这里如果我们进行删除的话,它是不会直接被删除的,他会删除之后,自动重新创建出来一个新的副本。只是随机id发生变化
[root@server2 ~]# kubectl scale deployment --replicas=2 nginx
[root@server2 ~]# kubectl get pod -o wide
service是一个抽象概念,定义了一个服务的多个pod逻辑合集和访问pod的策略,一般把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
[root@server2 ~]# kubectl describe svc nginx
这里的ip对应pod的副本ip
会根据副本数自动实现副本负载均衡
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
[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
清单格式
apiVersion: group/version //指明api资源属于哪个群组和版本,同一个组可以有多个版本
$ kubectl api-versions //查询命令
kind: //标记创建的资源类型,k8s主要支持以下资源类别
Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Cronjob
metadata: //元数据
name: //对像名称
namespace: //对象属于哪个命名空间
labels: //指定资源标签,标签是一种键值数据
spec: //定义目标资源的期望状态
[root@server2 ~]# kubectl api-versions ## 查看所有api的版本信息
[root@server2 ~]# kubectl explain pod.spec.containers ## pod清单帮助 一层一层看
[root@server2 ~]# kubectl delete deployments.apps nginx
[root@server2 ~]# kubectl delete svc nginx
[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
[root@server2 ~]# kubectl delete -f pod.yml
[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
[root@server2 ~]# kubectl get pod nginx-b5548c7c4-4phr9 -o yaml
[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节点上
在之前的基础上再加一个容器进来
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>
主要在控制器中使用,可以在节点上或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
参考网站:kubernetes官网
(1)Pod 可以包含多个容器,应用运行在这些容器里面,同时 Pod 也可以有一个或多个先于应用容器启动的 Init 容器。
(2)Init 容器与普通的容器非常像,除了如下两点:
(3)如果 Pod 的 Init 容器失败,Kubernetes 会不断地重启该 Pod,直到 Init 容器成功为止。然而,如果 Pod 对应的 restartPolicy 值为 Never,它不会重新启动。
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行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。