KUBERNETES03_k8s对象是什么、如何管理、命名空间、代码自动补全提示_超发和超售(1)
①. k8s里面操作的资源实体,就是k8s的对象,可以使用yaml来声明对象。然后让k8s根据yaml的声明创建出这个对象(kubectl create/run /expose…)②. 操作Kubernetes对象—无论是创建、修改,或者删除—需要使用Kubernetes API。比如,当使用kubectl命令行接口时,CLI 会执行必要的Kubernetes API调用③. Kubernetes
还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!
王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。
对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!
【完整版领取方式在文末!!】
93道网络安全面试题
需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)
内容实在太多,不一一截图了
黑客学习资源推荐
最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
😝朋友们如果有需要的话,可以联系领取~
1️⃣零基础入门
① 学习路线
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
② 路线对应学习视频
同时每个成长路线对应的板块都有配套的视频提供:
2️⃣视频配套工具&国内外网安书籍、文档
① 工具
② 视频
③ 书籍
资源较为敏感,未展示全面,需要的最下面获取
② 简历模板
因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
①. 什么是k8s对象
- ①. k8s里面操作的资源实体,就是k8s的对象,可以使用yaml来声明对象。然后让k8s根据yaml的声明创建出这个对象(kubectl create/run /expose…)
- ②. 操作Kubernetes对象—无论是创建、修改,或者删除—需要使用Kubernetes API。比如,当使用kubectl命令行接口时,CLI 会执行必要的Kubernetes API调用
- ③. Kubernetes对象指的是Kubernetes系统的持久化实体,所有这些对象合起来,代表了你集群的实际情况。常规的应用里,我们把应用程序的数据存储在数据库中,Kubernetes将其数据以Kubernetes对象的形式通过api server存储在etcd中。(集群中所有的资源都是etc中,k8s只依赖一个储存就是etcd)。具体来说,这些数据(Kubernetes对象)描述了:
- 集群中运行了哪些容器化应用程序(以及在哪个节点上运行)
- 集群中对应用程序可用的资源(网络,存储等)
- 应用程序相关的策略定义,例如,重启策略、升级策略、容错策略
- 其他Kubernetes管理应用程序时所需要的信息
- scheduler先计算应该去哪个节点部署
- ④. 对象的spec和status,每一个Kubernetes对象都包含了两个重要的字段:
- spec必须由您来提供,描述了您对该对象所期望的目标状态
- status只能由Kubernetes系统来修改,描述了该对象在Kubernetes系统中的实际状态
- 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)
- kubectl get pod my-nginx666 -oyaml集群中挑一个同类资源,获取出他的yaml
- kubectl run my-tomcat --image=tomcat --dry-run -oyaml 干跑一遍
- ②. 当您在Kubernetes中创建一个对象时,您必须提供
- 该对象的spec字段,通过该字段描述您期望的目标状态,该对象的一些基本信息,例如名字
- 可以使用 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文件中,需要配置如下的字段(必须字段)
- apiVersion:创建该对象所使用的Kubernetes API的版本
- kind:想要创建的对象的类别
- metadata: 用于唯一确定该对象的元数据:包括name和namespace,如果namespace为空,则默认值为default
- spec:你所期望的该对象的状态
- 不同类型的 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 安装成功后,默认有初始化了三个名称空间:
- default默认名称空间,如果Kubernetes对象中不定义metadata.namespace字段,该对象将放在此名称空间下
- kube-system Kubernetes系统创建的对象放在此名称空间下
- 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 #指定镜像
还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!
王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。
对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!
【完整版领取方式在文末!!】
***93道网络安全面试题***
![](https://i-blog.csdnimg.cn/blog_migrate/e8e8e04f5f05fdeb34634b0b3780bd33.png)
![](https://i-blog.csdnimg.cn/blog_migrate/99d4e30cb19514a36725fd71dd8b3308.png)
![](https://i-blog.csdnimg.cn/blog_migrate/79019216a46e2955b8c154ad933e9c8c.png)
**需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)**
内容实在太多,不一一截图了
### 黑客学习资源推荐
最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
#### 1️⃣零基础入门
##### ① 学习路线
对于从来没有接触过网络安全的同学,我们帮你准备了详细的**学习成长路线图**。可以说是**最科学最系统的学习路线**,大家跟着这个大的方向学习准没问题。
![image](https://i-blog.csdnimg.cn/blog_migrate/9e5c1ca69284d5344a87a1e01fe18208.gif#pic_center)
##### ② 路线对应学习视频
同时每个成长路线对应的板块都有配套的视频提供:
![image-20231025112050764](https://i-blog.csdnimg.cn/blog_migrate/b84394276be4f7fcf4d176fa628748ac.png#pic_center)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
更多推荐
所有评论(0)