kubernetes命令入门(namespaces,pods)

1 nameSpace介绍

​ namespace的中文名称是命名空间。 你可以认为namespaces是你kubernetes集群中的虚拟化集群。在一个Kubernetes集群中可以拥有多个命名空间,它们在逻辑上彼此隔离。 可以为你提供组织,安全甚至性能方面的帮助!

​ namespace是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或用户组。常见的pods, services, replication controllers和deployments等都是属于某一个namespace的(默认是default),而node, persistentVolumes等则不属于任何namespace。

​ 大多数的Kubernetes中的集群默认会有一个叫default的namespace。实际上,应该是4个:

​ 1,default:你的资源默认被创建于default命名空间。

​ 2,kube-system:kubernetes系统组件使用。

​ 3,kube-node-lease: kubernetes集群节点租约状态,v1.13加入

​ 4,kube-public:公共资源使用。但实际上现在并不常用。

​ 这个默认(default)的namespace并没什么特别,但你不能删除它。这很适合刚刚开始使用kubernetes和一些小的产品系统。但不建议应用于大型生产系统。因为,这种复杂系统中,团队会非常容易意外地或者无意识地重写或者中断其他服务service。相反,请创建多个命名空间来把你的service(服务)分割成更容易管理的块。

​ 作用:多租户情况下,实现资源隔离:属于逻辑隔离;属于管理边界;不属于网络边界;可以针对每个namespace做资源配额。

1.1 查看命名空间

#查看命名空间全拼
[root@k8s-master ~]# kubectl get namespaces
#查看命名空间简写
[root@k8s-master ~]# kubectl get ns

​ 查看命名空间下面的pod:

[root@k8s-master ~]# kubectl get pod --all-namespaces
[root@k8s-master ~]# kubectl get pod -A

​ 默认的命名空间有如下:

default 用户创建的pod默认在此命名空间 
kube-public 所有用户均可以访问,包括未认证用户 
kube-node-lease kubernetes集群节点租约状态,v1.13加入 
kube-system kubernetes集群在使用

1.2 创建命名空间

[root@k8s-master ~]# kubectl create namespace dream21th-one
namespace/dream21th-one created
[root@k8s-master ~]# kubectl create ns dream21th-two
namespace/dream21th-two created
[root@k8s-master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   118d
dream21th-one     Active   49s
dream21th-two     Active   30s
kube-node-lease   Active   118d
kube-public       Active   118d
kube-system       Active   118d

1.3 删除命名空间

[root@k8s-master ~]# kubectl delete namespace dream21th-one
namespace "dream21th-one" deleted
[root@k8s-master ~]# kubectl delete ns dream21th-two
namespace "dream21th-two" deleted
[root@k8s-master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   118d
kube-node-lease   Active   118d
kube-public       Active   118d
kube-system       Active   118d

2 pod简介

​ Pod是kubernetes集群能够调度的最小单元。Pod是容器的封装 。 在Kubernetes集群中,Pod是所有业务类型的基础,也是K8S管理的最小单位级,它是一个或多个容器的组合。这些容器共享存储、网络和命名空间,以及如何运行的规范。在Pod中,所有容器都被同

一安排和调度,并运行在共享的上下文中。对于具体应用而言,Pod是它们的逻辑主机,Pod包含业务相关的多个应用容器。

网络:每一个Pod都会被指派一个唯一的Ip地址,在Pod中的每一个容器共享网络命名空间,包括Ip地址和网络端口。在同一个Pod中的容器可以和localhost进行互相通信。当Pod中的容器需要与Pod外的实体进行通信时,则需要通过端口等共享的网络资源。

存储:Pod能够被指定共享存储卷的集合,在Pod中所有的容器能够访问共享存储卷,允许这些容器共享数据。存储卷也允许在一个Pod持久化数据,以防止其中的容器需要被重启。

​ K8s一般不直接创建Pod。 而是通过控制器和模版配置来管理和调度在Pod中的容器可能会由于异常等原因导致其终止退出,kubernetes提供了重启策略以重启容器。重启策略对同一个Pod的所有容器起作用,容器的重启由Node上的kubelet执行。Pod支持三种重启策略,在配置文件中通过restartPolicy字段设置重启策略(注意,这里的重启是指在Pod的宿主Node上进行本地重启,而不是调度到其它Node上):

​ 1,Always:只要退出就会重启;

​ 2,OnFailure:只有在失败退出(exit code不等于0)时,才会重启;

​ 3,Never:只要退出,就不再重启。

​ Kubernetes通过cgroups限制容器的CPU和内存等计算资源,包括requests(请求,调度器保证调度到资源充足的Node上)和limits(上限)等。

2.1 查看pod

#查看default命名空间下的pods
[root@k8s-master ~]# kubectl get pods
No resources found in default namespace.
#查看kube-system命名空间下的pods
[root@k8s-master ~]# kubectl get pods -n kube-system
#查看所有命名空间下的pods
[root@k8s-master ~]# kubectl get pod --all-namespaces
[root@k8s-master ~]# kubectl get pod -A

2.2 创建pod

​ 下载镜像:

[root@k8s-master ~]# docker pull tomcat:9.0.20-jre8-alpine

​ 运行pod:

#在default命名空间中创建一个pod副本的deployment
[root@k8s-master ~]# kubectl run tomcat9-test --image=tomcat:9.0.20-jre8-alpine --port=8080
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/tomcat9-test created
[root@k8s-master ~]# kubectl get pod
NAME                            READY   STATUS    RESTARTS   AGE
tomcat9-test-569b5bf455-9bvzs   1/1     Running   0          14s
[root@k8s-master ~]# kubectl get pod -o wide
NAME                            READY   STATUS    RESTARTS   AGE   IP           NODE        NOMINATED NODE   READINESS GATES
tomcat9-test-569b5bf455-9bvzs   1/1     Running   0          22s   10.244.2.3   k8s-work2   <none>           <none>
#使用pod的IP访问容器
[root@k8s-master ~]# curl 10.244.2.3:8080

2.3 扩容

# 扩容成3个
[root@k8s-master ~]# kubectl scale --replicas=3 deployment/tomcat9-test
deployment.apps/tomcat9-test scaled
# 查看pod
[root@k8s-master ~]# kubectl get pod
NAME                            READY   STATUS              RESTARTS   AGE
tomcat9-test-569b5bf455-9bvzs   1/1     Running             0          4m17s
tomcat9-test-569b5bf455-s826c   0/1     ContainerCreating   0          5s
tomcat9-test-569b5bf455-zx4zk   0/1     ContainerCreating   0          5s
[root@k8s-master ~]# kubectl get pod -o wide
NAME                            READY   STATUS    RESTARTS   AGE     IP           NODE        NOMINATED NODE   READINESS GATES
tomcat9-test-569b5bf455-9bvzs   1/1     Running   0          4m22s   10.244.2.3   k8s-work2   <none>           <none>
tomcat9-test-569b5bf455-s826c   1/1     Running   0          10s     10.244.1.5   k8s-work1   <none>           <none>
tomcat9-test-569b5bf455-zx4zk   1/1     Running   0          10s     10.244.1.4   k8s-work1   <none>           <none>
#查看部署
[root@k8s-master ~]# kubectl get deployment
NAME           READY   UP-TO-DATE   AVAILABLE   AGE
tomcat9-test   3/3     3            3           4m40s
[root@k8s-master ~]# kubectl get deployment -o wide
NAME           READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS     IMAGES                      SELECTOR
tomcat9-test   3/3     3            3           4m52s   tomcat9-test   tomcat:9.0.20-jre8-alpine   run=tomcat9-test
[root@k8s-master ~]# curl 10.244.2.3:8080

2.4 创建服务

[root@k8s-master ~]# kubectl expose deployment tomcat9-test --name=tomcat9-svc --port=8888 --target-port=8080 --protocol=TCP --type=NodePort
service/tomcat9-svc exposed
[root@k8s-master ~]# kubtck get pod
-bash: kubtck: 未找到命令
[root@k8s-master ~]# kubtck get pods
-bash: kubtck: 未找到命令
[root@k8s-master ~]# kubectl get pods
NAME                            READY   STATUS    RESTARTS   AGE
tomcat9-test-569b5bf455-9bvzs   1/1     Running   0          16m
tomcat9-test-569b5bf455-s826c   1/1     Running   0          12m
tomcat9-test-569b5bf455-zx4zk   1/1     Running   0          12m
[root@k8s-master ~]# kubtck get svc
-bash: kubtck: 未找到命令
[root@k8s-master ~]# kubectl get svc
NAME          TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)          AGE
kubernetes    ClusterIP   10.96.0.1     <none>        443/TCP          118d
tomcat9-svc   NodePort    10.96.33.14   <none>        8888:30286/TCP   40s
[root@k8s-master ~]# curl 10.96.33.14:8888

​ 在浏览器上面访问http://192.168.43.103:30286/也可以正常访问。

3 常用指令

3.1 get

​ kubectl get:列出一个或多个资源。

#查看集群状态信息
[root@k8s-master ~]# kubectl cluster-info
[root@k8s-master ~]# kubectl get cs
NAME                 STATUS    MESSAGE             ERROR
controller-manager   Healthy   ok                  
scheduler            Healthy   ok                  
etcd-0               Healthy   {"health":"true"}  
#查看集群节点信息
[root@k8s-master ~]# kubectl get nodes
NAME         STATUS   ROLES    AGE    VERSION
k8s-master   Ready    master   118d   v1.17.5
k8s-work1    Ready    <none>   118d   v1.17.5
k8s-work2    Ready    <none>   118d   v1.17.5
# 查看集群命名空间
[root@k8s-master ~]# kubectl get ns
# 查看指定命名空间的服务
[root@k8s-master ~]# kubectl get svc -n kube-system
# 以纯文本输出格式列出所有 pod。
[root@k8s-master ~]# kubectl get pods
# 以纯文本输出格式列出所有 pod,并包含附加信息(如节点名)。
[root@k8s-master ~]# kubectl get pods -o wide
# 以纯文本输出格式列出所有副本控制器和服务。
[root@k8s-master ~]# kubectl get rc,services
#列出在节点 server01 上运行的所有 pod
[root@k8s-master ~]# kubectl get pods --field-selector=spec.nodeName=k9s-master

3.2 describe

​ kubectl describe - 显示一个或多个资源的详细状态,默认情况下包括未初始化的资源。

[root@k8s-master ~]# kubectl describe nodes k8s-master
[root@k8s-master ~]# kubectl describe pods tomcat9-test-569b5bf455-9bvzs

3.3 delete

​ kubectl delete` - 从文件、stdin 或指定标签选择器、名称、资源选择器或资源中删除资源。

# 使用 pod.yaml 文件中指定的类型和名称删除 pod。 
kubectl delete -f pod.yaml 
# 删除标签名= <label-name> 的所有 pod 和服务。 
kubectl delete pods,services -l name=<label-name> 
# 删除所有具有标签名称= <label-name> 的 pod 和服务,包括未初始化的那些。 
kubectl delete pods,services -l name=<label-name> --include-uninitialized 
# 删除所有 pod,包括未初始化的 pod。 
kubectl delete pods --all

3.4 进入容器

​ kubectl exec - 对 pod 中的容器执行命令。与docker的exec命令非常类似。

# 从 pod <pod-name> 中获取运行 'date' 的输出。默认情况下,输出来自第一个容器。 
kubectl exec <pod-name> date
# 运行输出 'date' 获取在容器的 <container-name> 中 pod <pod-name> 的输出。
kubectl exec <pod-name> -c <container-name> date 
# 获取一个交互 TTY 并运行 /bin/bash <pod-name >。默认情况下,输出来自第一个容器。 
kubectl exec -ti <pod-name> /bin/bash

3.5 logs

​ kubectl logs - 打印 Pod 中容器的日志。

# 从 pod 返回日志快照。 
kubectl logs <pod-name> 
# 从 pod <pod-name> 开始流式传输日志。这类似于 'tail -f' Linux 命令。 
kubectl logs -f <pod-name>

3.6 格式化输出

[root@k8s-master ~]# kubectl get pod tomcat9-test-569b5bf455-9bvzs -o yaml

3.7 强制删除pod

强制删除一个pod 
--force --grace-period=0

4 资源缩写

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X0Kd3RqD-1656583866075)(D:\developsoftware\mayun\note\study-note\docker\images\image-20220630175627753.png)]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dream21st

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值