什么是K8S?
Kubernetes(常简称为K8s)是用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。该系统由Google设计并捐赠给Cloud Native Computing Foundation(今属Linux基金会)来使用。
官网:Kubernetes
安装K8S集群
安装前请保证各节点间能够访问国际网络。
参考站内文章.
kubeadm、kubelet 、kubectl
Kubeadm
Kubeadm是一个提供了 kubeadm init 和 kubeadm join 的工具, 作为创建Kubernetes 集群的“快捷途径” 的最佳实践。 kubeadm 通过执行必要的操作来启动和运行最小可用集群。 按照设计,它只关注启动引导,而非配置机器。
Kubelet
Kubelet是工作节点上的主要服务,定期从kube-apiserver组件接收新的或修改的Pod规范,并确保Pod及其容器在期望规范下运行。同时该组件作为工作节点的监控组件,向kube-apiserver汇报主机的运行状况。
kubectl
kubectl 是使用 Kubernetes API 与 Kubernetes 集群的控制面进行通信的命令行工具。
这个工具叫做 kubectl
。
针对配置信息,kubectl
在 $HOME/.kube
目录中查找一个名为 config
的配置文件。 你可以通过设置 KUBECONFIG
环境变量或设置 --kubeconfig
参数来指定其它 kubeconfig 文件。
本文概述了 kubectl
语法和命令操作描述,并提供了常见的示例。 有关每个命令的详细信息,包括所有受支持的参数和子命令, 请参阅 kubectl 参考文档。
有关安装说明,请参见安装 kubectl; 如需快速指南,请参见备忘单。 如果你更习惯使用 docker
命令行工具, Docker 用户的 kubectl
介绍了一些 Kubernetes 的等价命令。
官方文档:命令行工具 (kubectl) | Kubernetes
runtime(容器运行时)
你需要在集群内每个节点上安装一个 容器运行时 以使 Pod 可以运行在上面。
常见的runtime有Docker或Containerd
说明:
v1.24 之前的 Kubernetes 版本直接集成了 Docker Engine 的一个组件,名为 dockershim。 这种特殊的直接整合不再是 Kubernetes 的一部分 (这次删除被作为 v1.20 发行版本的一部分宣布)。
你可以阅读检查 Dockershim 移除是否会影响你以了解此删除可能会如何影响你。 要了解如何使用 dockershim 进行迁移, 请参阅从 dockershim 迁移。
如果你正在运行 v1.25 以外的 Kubernetes 版本,查看对应版本的文档。
建议v1.24以后的版本选择Containerd作为runtime。
Pod
Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。
Pod就像在Docker或者豌豆荚中是一组(一个或多个) 容器; 这些容器共享存储、网络、以及怎样运行这些容器的声明。 Pod 中的内容总是并置(colocated)的并且一同调度,在共享的上下文中运行。 Pod 所建模的是特定于应用的 “逻辑主机”,其中包含一个或多个应用容器, 这些容器相对紧密地耦合在一起。 在非云环境中,在相同的物理机或虚拟机上运行的应用类似于在同一逻辑主机上运行的云应用。
官方文档:Pod | Kubernetes
各组件的作用
以下是集群创建好以后运行的各个组件:
root@master:/home/mek# kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS kube-flannel kube-flannel-ds-2t2df 1/1 Running 1 (5h56m ago)
kube-flannel kube-flannel-ds-4hqb5 1/1 Running 1 (5h56m ago)
kube-flannel kube-flannel-ds-kc9q5 1/1 Running 1 (5h56m ago)
kube-system coredns-7f8cbcb969-b9tz9 1/1 Running 1 (5h56m ago)
kube-system coredns-7f8cbcb969-v85mk 1/1 Running 1 (5h56m ago)
kube-system etcd-master 1/1 Running 1 (5h56m ago)
kube-system kube-apiserver-master 1/1 Running 1 (5h56m ago)
kube-system kube-controller-manager-master 1/1 Running 2 (5h56m ago)
kube-system kube-proxy-5x46t 1/1 Running 1 (5h56m ago)
kube-system kube-proxy-jlptn 1/1 Running 1 (5h56m ago)
kube-system kube-proxy-xrg66 1/1 Running 1 (5h56m ago)
kube-system kube-scheduler-master 1/1 Running 3 (24m ago)
coredns
CoreDNS 是一个灵活可扩展的 DNS 服务器,可以作为 Kubernetes 集群 DNS。 与 Kubernetes 一样,CoreDNS 项目由 CNCF 托管。
通过替换现有集群部署中的 kube-dns,或者使用 kubeadm 等工具来为你部署和升级集群, 可以在你的集群中使用 CoreDNS 而非 kube-dns。
etcd
etcd 是兼具一致性和高可用性的键值数据库,可用于服务发现以及配置中心。 ETCD 采用raft 一致性算法,基于Go 语言实现。 可以作为保存Kubernetes 所有集群数据的后台数据库,在整个云原生中发挥极其重要的作用。
kube-apiserver
apiserver是集群的核心,是k8s中最重要的组件,因为它是实现声明式api的关键。
kubernetes API server的核心功能是提供了kubernetes各类资源对象(pod、RC 、service等)的增、删、改、查以及watch等HTTP Rest接口。
kube-controller
控制器,负责调度节点运行Pod,维护Pod生命周期。
kube-proxy
kubectl proxy为访问kubernetes apiserver的REST api充当反向代理角色,这里反向代理的作用与通常意义上的反向代理作用相同,比如提供统一入口进行访问控制、监控、管理,在代理中管理后端,在代理中进行认证等。
kube-scheduler
Kubernetes Scheduler的作用是将待调度的Pod(API新创建的Pod、Controller Manager为补足副本而创建的Pod等)按照特定的调度算法和调度策略绑定(Binding)到集群中某个合适的Node上,并将绑定信息写入etcd中。
flannel
第三方网络插件,提供不同节点Pod间的网络通信。
flannel的工作原理是将Docker0网桥的数据包捕获后发送至目的节点,并由目的主机的flannel插件将数据包送至Docker0网桥以此实现Pod跨节点网络通信。
集群管理
查看节点状态
kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane 56d v1.25.3
node1 Ready <none> 56d v1.25.3
node2 Ready <none> 56d v1.25.3
查看全部Pod状态
kubectl get pod -A
镜像加速
由于kubernetes从V1.24
版本开始默认使用**containerd**
,需要修改**containerd**
的配置文件,才能让Pod的镜像使用镜像加速器。
配置文件路径一般为**/etc/containerd/config.toml**
,详见阿里云镜像加速。
Pod管理
启动一个Pod
通过kubectl run 指定pod名称和容器启动一个pod
root@master:~/Woker# kubectl run mynginx --image=nginx:1.22
pod/mynginx created
mynginx # pod名称
--image # 指定镜像和Tag
查看Pod运行日志
kubectl logs -f <pod名称>
kubectl logs -f mynginx
/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
2023/01/04 07:48:37 [notice] 1#1: using the "epoll" event method
2023/01/04 07:48:37 [notice] 1#1: nginx/1.22.1
2023/01/04 07:48:37 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
2023/01/04 07:48:37 [notice] 1#1: OS: Linux 5.15.0-52-generic
2023/01/04 07:48:37 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2023/01/04 07:48:37 [notice] 1#1: start worker processes
2023/01/04 07:48:37 [notice] 1#1: start worker process 29
2023/01/04 07:48:37 [notice] 1#1: start worker process 30
2023/01/04 07:48:37 [notice] 1#1: start worker process 31
2023/01/04 07:48:37 [notice] 1#1: start worker process 32
2023/01/04 07:48:37 [notice] 1#1: start worker process 33
2023/01/04 07:48:37 [notice] 1#1: start worker process 34
2023/01/04 07:48:37 [notice] 1#1: start worker process 35
2023/01/04 07:48:37 [notice] 1#1: start worker process 36
查看Pod信息
kubectl describe pod <pod名称>
root@master:~/Woker# kubectl describe pod mynginx
Name: mynginx
Namespace: default
Priority: 0
Service Account: default
Node: node2/192.168.200.33
Start Time: Wed, 04 Jan 2023 07:48:18 +0000
Labels: run=mynginx
Annotations: <none>
Status: Running
IP: 10.244.2.5
IPs:
IP: 10.244.2.5
Containers:
mynginx:
Container ID: containerd://5c4ca26ba6a29b369f85b8b90822ec51f3aa3f6820e2203aa89599ff20985167
Image: nginx:1.22
Image ID: docker.io/library/nginx@sha256:f8b4a55777ba19cf3a042b022bcd3fd12bd2f9da03f973c1188ef90b8c1f4c47
Port: <none>
Host Port: <none>
State: Running
Started: Wed, 04 Jan 2023 07:48:37 +0000
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-7znbg (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
kube-api-access-7znbg:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional: <nil>
DownwardAPI: true
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 4m16s default-scheduler Successfully assigned default/mynginx to node2
Normal Pulling 4m15s kubelet Pulling image "nginx:1.22"
Normal Pulled 3m57s kubelet Successfully pulled image "nginx:1.22" in 18.336864602s
Normal Created 3m57s kubelet Created container mynginx
Normal Started 3m57s kubelet Started container mynginx
查看更多Pod信息
root@master:~/Woker# kubectl get pod -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mynginx 1/1 Running 0 5m28s 10.244.2.5 node2 <none> <none>
进入Pod执行命令
kubectl exec -it <Pod名称> – /bin/bash
注意: – 后面是要执行的名称 -it 为交互模式
kubectl exec -it mynginx -- /bin/bash
# 退出
exit
*退出后Pod不会结束运行
自动删除Pod
运行时加上 --rm, Pod结束时会自动删除
root@master:~/Woker# kubectl run my --image=busybox -it --rm # 加上--rm 参数
If you don't see a command prompt, try pressing enter.
/ #
/ #
/ #
/ # ping 030399.xyz
PING 030399.xyz (64.112.41.158): 56 data bytes
64 bytes from 64.112.41.158: seq=0 ttl=50 time=227.985 ms
64 bytes from 64.112.41.158: seq=1 ttl=50 time=227.809 ms
64 bytes from 64.112.41.158: seq=2 ttl=50 time=227.882 ms
64 bytes from 64.112.41.158: seq=3 ttl=50 time=227.879 ms
64 bytes from 64.112.41.158: seq=4 ttl=50 time=228.032 ms
64 bytes from 64.112.41.158: seq=5 ttl=50 time=227.925 ms
64 bytes from 64.112.41.158: seq=6 ttl=50 time=227.659 ms
^C
--- 030399.xyz ping statistics ---
7 packets transmitted, 7 packets received, 0% packet loss
round-trip min/avg/max = 227.659/227.881/228.032 ms
/ #
/ #
/ #
/ # uname
Linux
/ # uname -a
Linux my 5.15.0-52-generic #58-Ubuntu SMP Thu Oct 13 08:03:55 UTC 2022 x86_64 GNU/Linux
/ # exit
Session ended, resume using 'kubectl attach my -c my -i -t' command when the pod is running
pod "my" deleted
root@master:~/Woker# kubectl get pods -o wide # 容器自动删除
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mynginx 1/1 Running 0 19m 10.244.2.5 node2 <none> <none>
root@master:~/Woker#
删除Pod
通过 kubectl delete pod <Pod名称> 删除Pod
root@master:~/Woker# kubectl delete pod mynginx
pod "mynginx" deleted
root@master:~/Woker# kubectl get pods -o wide
No resources found in default namespace.
root@master:~/Woker#
Deployment(部署)与ReplicaSet(副本集)
Deployment是对ReplicaSet和Pod更高级的抽象。
它使Pod拥有多副本,自愈,扩缩容、滚动升级等能力。
ReplicaSet(副本集)是一个Pod的集合。
它可以设置运行Pod的数量,确保任何时间都有指定数量的 Pod 副本在运行。
通常我们不直接使用ReplicaSet,而是在Deployment中声明。
#创建deployment,部署3个运行nginx的Pod
kubectl create deployment nginx-deployment --image=nginx:1.22 --replicas=5
# 通过kubectl create deployment 创建副本 --image 自动镜像版本 --replicas 自动副本数量
root@master:~/Woker# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deployment-79b458c974-9mh2n 1/1 Running 0 3m31s 10.244.2.9
nginx-deployment-79b458c974-d9rbf 1/1 Running 0 3m31s 10.244.1.13
nginx-deployment-79b458c974-jhnrd 1/1 Running 0 3m31s 10.244.2.12
nginx-deployment-79b458c974-r8fnp 1/1 Running 0 3m31s 10.244.1.10
nginx-deployment-79b458c974-xd2xt 1/1 Running 0 3m31s 10.244.1.9
#查看deployment
kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 5/5 5 5 74s
#查看更多deployment信息
root@master:~/Woker# kubectl get deployment/nginx-deployment -owide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx-deployment 10/10 10 10 9m24s nginx nginx:1.22 app=nginx-deployment
#查看replicaSet
kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deployment-79b458c974 5 5 5 78s
#删除deployment
kubectl delete deploy nginx-deployment
扩缩容:
手动缩放
通过kubectl scale deployment/<名称> --replicas=10 调整副本数量
kubectl scale deployment/nginx-deployment --replicas=10
deployment.apps/nginx-deployment scaled
# 查看
root@master:~/Woker# kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 10/10 10 10 5m11s
自动缩放
自动缩放通过增加和减少副本的数量,以保持所有 Pod 的平均 CPU 利用率不超过 75%。
自动伸缩需要声明Pod的资源限制,同时使用 Metrics Server 服务(K3s默认已安装)。
本例仅用来说明kubectl autoscale命令的使用,完整示例参考:HPA演示
#创建自动缩放deployment
kubectl autoscale deployment/nginx-auto --min=3 --max=10 --cpu-percent=75
# --min=3 最小副本数
# --max=10 最大副本数
# --cpu-percent=75 CPU最大占用率
#查看自动缩放
kubectl get hpa
#删除自动缩放
kubectl delete hpa nginx-deployment
滚动更新和回滚
更新:
通过kubectl set image 设置新镜像版本
#更新容器镜像
kubectl set image deployment/nginx-deployment nginx=nginx:1.23
#滚动更新
kubectl rollout status deployment/nginx-deployment
#查看过程
kubectl get rs --watch
回滚:
查看历史版本:
kubectl rollout history deployment/nginx-deployment
查看指定版本信息:
kubectl rollout history deployment/nginx-deployment --revision=1
执行回滚:
kubectl rollout undo deployment/nginx-deployment --to-revision=1
root@master:~/Woker# kubectl rollout history deployment/nginx-deployment
# 列出所有版本
deployment.apps/nginx-deployment
REVISION CHANGE-CAUSE
1 <none>
2 <none>
root@master:~/Woker# kubectl rollout history deployment/nginx-deployment --revision=1
# 查看指定版本信息
deployment.apps/nginx-deployment with revision #1
Pod Template:
Labels: app=nginx-deployment
pod-template-hash=79b458c974
Containers:
nginx:
Image: nginx:1.22
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
root@master:~/Woker# kubectl rollout undo deployment/nginx-deployment --to-revision=1
# 执行版本回滚
deployment.apps/nginx-deployment rolled back
root@master:~/Woker# kubectl get deployment/nginx-deployment -owide
# 查看deployment 信息
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx-deployment 10/10 10 10 14m nginx nginx:1.22 app=nginx-deployment
root@master:~/Woker#
Service(服务)
Service将运行在一组 Pods 上的应用程序公开为网络服务的抽象方法。
Service为一组 Pod 提供相同的 DNS 名,并且在它们之间进行负载均衡。
Kubernetes 为 Pod 提供分配了IP 地址,但IP地址可能会发生变化。
集群内的容器可以通过service名称访问服务,而不需要担心Pod的IP发生变化。
Kubernetes Service 定义了这样一种抽象:
逻辑上的一组可以互相替换的 Pod,通常称为微服务。
Service 对应的 Pod 集合通常是通过选择算符来确定的。
举个例子,在一个Service中运行了3个nginx的副本。这些副本是可互换的,我们不需要关心它们调用了哪个nginx,也不需要关注 Pod的运行状态,只需要调用这个服务就可以了。
创建Service对象
ServiceType 取值
●ClusterIP:将服务公开在集群内部。kubernetes会给服务分配一个集群内部的 IP,集群内的所有主机都可以通过这个Cluster-IP访问服务。集群内部的Pod可以通过service名称访问服务。
●NodePort:通过每个节点的主机IP 和静态端口(NodePort)暴露服务。 集群的外部主机可以使用节点IP和NodePort访问服务。
●ExternalName:将集群外部的网络引入集群内部。
●LoadBalancer:使用云提供商的负载均衡器向外部暴露服务。
创建ClusterIP:
# port是service访问端口,target-port是Pod端口
# 二者通常是一样的
kubectl expose deployment/nginx-deployment \
--name=nginx-service --type=ClusterIP --port=80 --target-port=80
创建NodePort:
# 随机产生主机端口 注意这里的8080 为集群内访问ip
kubectl expose deployment/nginx-deployment \
--name=nginx-service2 --type=NodePort --port=8080 --target-port=80
1.NodePort端口是随机的,范围为:30000-32767。
2.集群中每一个主机节点的NodePort端口都可以访问。
3.如果需要指定端口,不想随机产生,需要使用配置文件来声明。
查看Service列表:
kubectl get svc
root@master:~# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 56d
nginx-service ClusterIP 10.109.31.218 <none> 80/TCP 31s
nginx-service2 NodePort 10.110.88.25 <none> 8080:30989/TCP 5s
# 30989 为主机外部端口,可通过任意节点IP:30989 访问
删除Service:
root@master:~# kubectl delete svc/nginx-service2
service "nginx-service2" deleted
创建ExternalName:
只能通过Yaml文件实现:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: NodePort
selector:
app.kubernetes.io/name: MyApp
ports:
# 默认情况下,为了方便起见,`targetPort` 被设置为与 `port` 字段相同的值。
- port: 80
targetPort: 80
# 可选字段
# 默认情况下,为了方便起见,Kubernetes 控制平面会从某个范围内分配一个端口号(默认:30000-32767)
nodePort: 30007
使用外部 IP
如果外部的 IP 路由到集群中一个或多个 Node 上,Kubernetes Service 会被暴露给这些 externalIPs
。 通过外部 IP(作为目的 IP 地址)进入到集群,打到 Service 的端口上的流量, 将会被路由到 Service 的 Endpoint 上。 externalIPs
不会被 Kubernetes 管理,它属于集群管理员的职责范畴。
根据 Service 的规定,externalIPs
可以同任意的 ServiceType
来一起指定。 在上面的例子中,my-service
可以在 “80.11.12.10:80
”(externalIP:port
) 上被客户端访问。
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app.kubernetes.io/name: MyApp
ports:
- name: http
protocol: TCP
port: 80
targetPort: 9376
externalIPs:
- 80.11.12.10
#使用 80.11.12.10:80 即可访问
Namespace(命名空间)
命名空间(Namespace)是一种资源隔离机制,将同一集群中的资源划分为相互隔离的组。
命名空间可以在多个用户之间划分集群资源(通过资源配额)。
●例如我们可以设置开发、测试、生产等多个命名空间。
同一命名空间内的资源名称要唯一,但跨命名空间时没有这个要求。
命名空间作用域仅针对带有名字空间的对象,例如 Deployment、Service 等。
这种作用域对集群访问的对象不适用,例如 StorageClass、Node、PersistentVolume 等。
Kubernetes 会创建四个初始命名空间:
●default 默认的命名空间,不可删除,未指定命名空间的对象都会被分配到default中。
●kube-system Kubernetes 系统对象(控制平面和Node组件)所使用的命名空间。
●kube-public 自动创建的公共命名空间,所有用户(包括未经过身份验证的用户)都可以读取它。通常我们约定,将整个集群中公用的可见和可读的资源放在这个空间中。
●kube-node-lease 租约(Lease)对象使用的命名空间。每个节点都有一个关联的 lease 对象,lease 是一种轻量级资源。lease对象通过发送心跳,检测集群中的每个节点是否发生故障。
使用kubectl get lease -A查看lease对象
使用多个命名空间
●命名空间是在多个用户之间划分集群资源的一种方法(通过资源配额)。
○例如我们可以设置开发、测试、生产等多个命名空间。
●不必使用多个命名空间来分隔轻微不同的资源。
○例如同一软件的不同版本: 应该使用标签 来区分同一命名空间中的不同资源。
●命名空间适用于跨多个团队或项目的场景。
○对于只有几到几十个用户的集群,可以不用创建命名空间。
●命名空间不能相互嵌套,每个 Kubernetes 资源只能在一个命名空间中。
管理命名空间
#创建命名空间
kubectl create namespace dev
#查看所有命名空间 namespace 缩写为ns
kubectl get ns
#在命名空间内运行Pod 运行时可缩写为n
kubectl run nginx --image=nginx --namespace=dev
kubectl run my-nginx --image=nginx -n=dev
#查看命名空间内的Pod
kubectl get pods -n=dev
#查看命名空间内所有对象
kubectl get all
# 删除命名空间会删除命名空间下的所有内容,包括pod,server
kubectl delete ns dev
切换当前命名空间:
#查看当前上下文
kubectl config current-context
#将dev设为当前命名空间,后续所有操作都在此命名空间下执行。
kubectl config set-context $(kubectl config current-context) --namespace=dev
通过YAML文件创建命名空间:
apiVersion: v1
kind: Namespace # kind: Namespace 声明为Namespace
metadata:
name: <insert-namespace-name-here>
测试:
# 创建
root@master:~/Woker# kubectl apply -f namespace.yaml
namespace/mek created
root@master:~/Woker# kubectl get ns
NAME STATUS AGE
default Active 57d
kube-flannel Active 57d
kube-node-lease Active 57d
kube-public Active 57d
kube-system Active 57d
mek Active 9s
# 删除
root@master:~/Woker# kubectl delete -f namespace.yaml
namespace "mek" deleted
root@master:~/Woker# kubectl get ns
NAME STATUS AGE
default Active 57d
kube-flannel Active 57d
kube-node-lease Active 57d
kube-public Active 57d
kube-system Active 57d
运行Yaml文件
K8S可以通过Yaml文件执行Pod部署,Service声明,Namespace创建等操作,在生产环境中更推荐使用YAML文件创建资源.
启动一个yaml文件
kubectl apply -f recommended.yaml
停止一个yaml文件
kubectl delete -f recommended.yaml