当前位置: 首页 > news >正文

四、k8s快速入门之Kubernetes资源清单

kubernetes中的资源

⭐️ k8s中所有的内容都抽象为资源,资源实列化之后,叫做对象

1️⃣名称空间级别

⭐️ kubeadm在执行k8spod的时候会在kube-system这个名称空间下执行,所以说当你kubectl get pod 的时候是查看不到的查看的是默认的pod

  • 工作负载型资源( workload ):PodReplicaSetDeploymentStatefulSetDaemonSet、 Job、CronJob ( ReplicationControllerv1.11 版本被废弃)
  • 服务发现及负载均衡型资源( ServiceDi scovery LoadBalance ): ServiceIngress、 …
  • 配置与存储型资源: Volume( 存储卷)、CSI( 容器存储接口,可以扩展各种各样的第三方存储卷)
  • 特殊类型的存储卷: ConfigMap( 当配置中心来使用的资源类型)、Secret (保存敏感数据)、
  • DownwardAPI (把外部环境中的信息输出给容器)
2️⃣ 集群级别

⭐️ 不管在那个名称空间都可见

Namespace(命名空间)、 NodeRoleClusterRoleRoleBindingClusterRoleBinding

3️⃣ 元数据级

HPAPodTemplateLimitRange

kubernetes资源清单

⭐️在k8s中使用YAML文件格式来创建符合期望的pod,这样的yaml文件叫做资源清单

1️⃣ K8s中yaml常用字段

⭐️必填段

image-20240430003341832

⭐️主要段

image-20240430003407185

image-20240430003418273

image-20240430003427912

⭐️ 额外段

image-20240430003441722

3️⃣ 实际操作命令

⭐️ 获取api列表

[root@master ~]# kubectl api-versions
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
apps/v1beta1
apps/v1beta2
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1beta1
coordination.k8s.io/v1
coordination.k8s.io/v1beta1
events.k8s.io/v1beta1
extensions/v1beta1
networking.k8s.io/v1
networking.k8s.io/v1beta1
node.k8s.io/v1beta1
policy/v1beta1
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1
scheduling.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1

获取版本信息(查看详细信息)

kubect explain -h

字段格式

apiversion <string>并表示子符串类型
metadata <bject>#表示需要嵌套多层字段
labels <map[string]string>#表示由k:v组成的映射
finalizers <[]string>#表示字串列表
ownerReferences < []0bject>#表示对象列表
hostPID <boolean>#布尔类型
priority <integer>#整型
name <string> -required-#如果类型后面接-required-, 表示为必填字段

image-20240430003604304

⭐️ 编写一个简单的pod文件模板

mkdir pod
vim pod/pod.yaml
apiVersion: v1
kind: Pod
metadata:name: websitenamespace: default ##这里不填也可以默认就是这个命名空间labels: ##定义标签app: webvsersion: v1
spec:containers:- name: web1image: nginx- name: web2image: nginx

创建pod

kubectl create -f pod/pod.yaml

查看pod

[root@master ~]# kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
nginx-6b48575596-bsdt2   1/1     Running   1          24h
nginx-6b48575596-fbdjf   1/1     Running   1          24h
nginx-6b48575596-wzmdp   1/1     Running   1          24h
website                  1/2     Error     0          18s

⚠️ 可以看见是没起来的,为什么没起来呢?我们查看一下pod日志

kubectl describe pod website
Events:Type     Reason     Age                    From               Message----     ------     ----                   ----               -------Normal   Scheduled  5m27s                  default-scheduler  Successfully assigned default/website to node1Normal   Pulling    5m27s                  kubelet, node1     Pulling image "nginx"Normal   Pulled     5m21s                  kubelet, node1     Successfully pulled image "nginx"Normal   Created    5m21s                  kubelet, node1     Created container web1Normal   Started    5m21s                  kubelet, node1     Started container web1Normal   Pulling    4m17s (x4 over 5m21s)  kubelet, node1     Pulling image "nginx"Normal   Pulled     4m12s (x4 over 5m15s)  kubelet, node1     Successfully pulled image "nginx"Normal   Created    4m12s (x4 over 5m15s)  kubelet, node1     Created container web2Normal   Started    4m12s (x4 over 5m14s)  kubelet, node1     Started container web2Warning  BackOff    19s (x20 over 5m3s)    kubelet, node1     Back-off restarting failed container
##可以看见web2一直退出
[root@master ~]# kubectl log website web2
log is DEPRECATED and will be removed in a future version. Use logs instead.
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2021/08/17 07:48:28 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
2021/08/17 07:48:28 [emerg] 1#1: bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
2021/08/17 07:48:28 [notice] 1#1: try again to bind() after 500ms
2021/08/17 07:48:28 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
2021/08/17 07:48:28 [emerg] 1#1: bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
2021/08/17 07:48:28 [notice] 1#1: try again to bind() after 500ms
2021/08/17 07:48:28 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
2021/08/17 07:48:28 [emerg] 1#1: bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
2021/08/17 07:48:28 [notice] 1#1: try again to bind() after 500ms
2021/08/17 07:48:28 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
2021/08/17 07:48:28 [emerg] 1#1: bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
2021/08/17 07:48:28 [notice] 1#1: try again to bind() after 500ms
2021/08/17 07:48:28 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
2021/08/17 07:48:28 [emerg] 1#1: bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
2021/08/17 07:48:28 [notice] 1#1: try again to bind() after 500ms
2021/08/17 07:48:28 [emerg] 1#1: still could not bind()
这里一直显示80被占用

这里我画了个图

image-20240430003759571

我们更改pod.yaml文件在删除web2和镜像就好了

vim pod/pod.yaml 
apiVersion: v1
kind: Pod
metadata:name: websitelabels:app: webvsersion: v1
spec:containers:- name: web1image: nginx

在创建一个pod

[root@master ~]# kubectl create -f pod/pod.yaml 
pod/website created
[root@master ~]# kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
nginx-6b48575596-bsdt2   1/1     Running   1          24h
nginx-6b48575596-fbdjf   1/1     Running   1          24h
nginx-6b48575596-wzmdp   1/1     Running   1          24h
website                  1/1     Running   0          10s

未经允许禁止转载

http://www.lryc.cn/news/472942.html

相关文章:

  • 掌握ElasticSearch(六):分析过程
  • 【设计模式】使用python 实践框架设计
  • Apache paimon-CDC
  • 如何分析算法的执行效率和资源消耗
  • 提示工程(Prompt Engineering)指南(进阶篇)
  • 音视频入门基础:FLV专题(19)——FFmpeg源码中,解码Audio Tag的AudioTagHeader,并提取AUDIODATA的实现
  • 前端零基础入门到上班:【Day3】从零开始构建网页骨架HTML
  • 字符脱敏工具类
  • 【jvm】jvm对象都分配在堆上吗
  • @AutoWired和 @Resource原理深度分析!
  • C++设计模式创建型模式———原型模式
  • 重学SpringBoot3-Spring WebFlux之SSE服务器发送事件
  • YOLO即插即用模块---AgentAttention
  • 探索开源语音识别的未来:高效利用先进的自动语音识别技术20241030
  • 学习路之TP6--workman安装
  • .NET内网实战:通过白名单文件反序列化漏洞绕过UAC
  • AI Agents - 自动化项目:计划、评估和分配
  • Git的.gitignore文件
  • 网站安全,WAF网站保护暴力破解
  • 深度学习:梯度下降算法简介
  • SparkSQL整合Hive后,如何启动hiveserver2服务
  • 前端路由如何从0开始配置?vue-router 的使用
  • Java中的运算符【与C语言的区别】
  • 二、基础语法
  • DB-GPT系列(一):DB-GPT能帮你做什么?
  • 【Python各个击破】numpy
  • 【STM32 Blue Pill编程实例】-4位7段数码管使用
  • [进阶]java基础之集合(三)数据结构
  • 《Apache Cordova/PhoneGap 使用技巧分享》
  • SCP(Secure Copy