kubernetes中的资源
⭐️ k8s中所有的内容都抽象为资源,资源实列化之后,叫做对象
1️⃣名称空间级别
⭐️ kubeadm
在执行 k8s
的 pod
的时候会在 kube-system
这个名称空间下执行,所以说当你 kubectl get pod
的时候是查看不到的查看的是默认的 pod
- 工作负载型资源(
workload
):Pod
、ReplicaSet
、Deployment
、StatefulSet
、DaemonSet
、 Job、CronJob
(ReplicationController
在v1.11
版本被废弃) - 服务发现及负载均衡型资源(
ServiceDi
scovery
LoadBalance
):Service
、Ingress
、 ... - 配置与存储型资源:
Volume
( 存储卷)、CSI
( 容器存储接口,可以扩展各种各样的第三方存储卷) - 特殊类型的存储卷:
ConfigMap
( 当配置中心来使用的资源类型)、Secret (保存敏感数据)、 DownwardAPI
(把外部环境中的信息输出给容器)
2️⃣ 集群级别
⭐️ 不管在那个名称空间都可见
Namespace
(命名空间)、 Node
、Role
、 ClusterRole
、 RoleBinding
、ClusterRoleBinding
3️⃣ 元数据级
HPA
、PodTemplate
、LimitRange
kubernetes资源清单
⭐️在 k8s
中使用 YAML
文件格式来创建符合期望的 pod
,这样的 yaml
文件叫做资源清单
1️⃣ K8s
中yaml常用字段
⭐️必填段
⭐️主要段
⭐️ 额外段
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-, 表示为必填字段
⭐️ 编写一个简单的pod文件模板
mkdir pod
vim pod/pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: website
namespace: default ##这里不填也可以默认就是这个命名空间
labels: ##定义标签
app: web
vsersion: v1
spec:
containers:
- name: web1
image: nginx
- name: web2
image: 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 node1
Normal Pulling 5m27s kubelet, node1 Pulling image "nginx"
Normal Pulled 5m21s kubelet, node1 Successfully pulled image "nginx"
Normal Created 5m21s kubelet, node1 Created container web1
Normal Started 5m21s kubelet, node1 Started container web1
Normal 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 web2
Normal Started 4m12s (x4 over 5m14s) kubelet, node1 Started container web2
Warning 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被占用
这里我画了个图
我们更改 pod.yaml
文件在删除 web2
和镜像就好了
vim pod/pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: website
labels:
app: web
vsersion: v1
spec:
containers:
- name: web1
image: 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