• KUBERNETES 02:基本操作命令


    K8S 已经安装完成,接下来就得学习它的基本使用方法,也就是常见的命令使用!

    在这之前为了便于使用,可以配置一个 K8S 的命令 TAB 补全功能:

    yum install -y bash-completion
    source /usr/share/bash-completion/bash_completion
    source <(kubectl completion bash)
    echo "source <(kubectl completion bash)" >> ~/.bashrc

    此时 kubectl 之后使用 TAB 键就能直接补全命令!

    关于 K8S Pod

    注意,所有操作都应该在 K8S 的 Master 节点上面执行。和 docker 一样,一开始先了解命令的使用,之后才是编写 docker-compose.yaml 配置文件。

    关于 K8S Pod:

    1. K8S 最小的调度单元为 Pod,一个 Pod 由一个或多个关系紧密的容器组成,Pod 内部共享网络,存储等,而 Pod 之间的隔离可以采用不同的名称空间。

    2. K8S 所有的操作都是为了更好的运行 Pod,且 Pod 可分为:自助式 Pod 和控制器管理的 Pod。

    3. 一个或多个相同的 Pod 又组成了一个 Service,其作用在于给一组相同的 Pod 提供一个固定的访问入口(Cluster IP),Service 和 Pod 采用标签进行绑定,而不是 Pod 的 IP,因此不用关心因为 Pod 重构之后 IP 变更的问题,每组 Pod 都应该有单独的 Service 进行调度。

    4. 用户请求可以看成:请求到达宿主机 Node IP,转发到 Service 的 Cluster IP,然后分发到 Service 下面的某个 Pod IP,最后 Pod 转发给内部的指定容器。

    K8S 基本操作

    1. 查看节点情况:

    kubectl get nodes

    可在后面增加 -o wide 参数,查看详细情况,增加 -w 参数,动态查看,类似 Linux 的 top 命令。

    2. 查看名称空间:

    kubectl get ns

    结果如下:

    K8S 本身的系统服务都运行在 kube-system 这个名称空间中,用户在没指定名称空间时运行的都在默认的 default 名称空间中。

    3. 查看运行的 Pod:

    kubectl get pods

    由于现在还没有运行用户自定义的 Pod,所以是空的,可以看看系统运行的:

    kubectl get pods -n kube-system

    通过 -n 参数指定名称空间。

    查看详细信息可以看到服务重启的次数,运行在集群内的哪个节点等。

    4. 运行一个简单的 Pod:

    kubectl run nginx-pod-demo --image=nginx:1.14-alpine --port=80 --replicas=1

    结果如图:

    提示大致的意思是 run 的某些参数将会在未来的版本中被移除,建议使用新的参数。不通管,只需要看到最后一行显示 created 即可。

    其中参数的意思:

    --image:指定容器所使用的镜像版本。

    --port:说明服务端口,但是并未映射出来。

    --replicas:指定该 Pod 运行的副本数量。

    此时查看 Pod:

    可以发现它的名称并非我们指定的名称,而是在指定的名称后面增加了一串乱七八糟的字符。那我们指定的名称到底是什么名称?

    5. 查看默认控制器:

    kubectl get deployment

    结果如图:

    通过该图可以知道:

    1. K8S 的命令其实很多都是可以简写的。

    2. deployment 是一种默认 Pod 控制器,后面会详讲,run 的时候指定的名称其实是 deployment 的名称。

    kubectl get deployments.apps nginx-pod-demo

    甚至可以专门指定查看某个具体的 deployment 的信息:

    6. 查看详细信息:

    kubectl describe deployment nginx-pod-demo

    结果如图:

    查看 Pod 的详细信息:

    kubectl describe pods nginx-pod-demo-6f9c78b8bd-snplz

    结果如下:

    7. 访问测试:

    可以在集群内部任何宿主机通过 Pod 的 IP 和端口对 Pod 的访问进行访问。但是外部无法访问。

    8. pod 扩容:

    kubectl scale deployment nginx-pod-demo --replicas=3

    查看:

    9. 外部访问:

    以此时的状态而言,由于不再是单节点,所有以 Pod IP 来访问肯定不现实,此时的做法是在 Pod 上面再加一层 Service。

    kubectl expose deployment nginx-pod-demo --name=nginx-demo-svc --port=80 --target-port=80

    参数说明:--target-port:指定外部端口。

    查看 svc:

    kubectl get svc

    使用 svc 的 IP 进行访问:

    但是这样依然存在一个问题,虽然统一到了 svc 的 IP 地址上面,可外部依然无法访问,只支持集群内部访问。

    10. 修改配置:

    kubectl edit svc nginx-demo-svc

    查看:

    保存之后再度查看:

    当然,也可以在 expose 的时候通过 --type 指定。外部访问测试:

    映射出来的端口是一个大于 30000 的随机端口。

    11. 查看 Pod 日志:

    kubectl logs nginx-pod-demo-6f9c78b8bd-5jccn

    结果如图:

    12. 升级和回滚:

    kubectl set image deployment nginx-pod-demo nginx-pod-demo:nginx:1.15-alpine --record

    镜像版本升级:

    查看可以提供给回滚的版本:

    kubectl rollout history deployment nginx-pod-demo

    结果如图:

    回滚到上个版本:

    kubectl rollout undo deployment nginx-pod-demo

    此时初始版本变成到 3 上面去了:

    当然,也可以通过 --to-revision 参数回滚到指定版本。

    13. 删除:

    删除 Pod:

    kubectl delete pods nginx-pod-demo-6f9c78b8bd-2cmn8

    结果如图:

    由于控制器定义了 replicas 的原因,所以删除了会自动重建新的。

    删除 deployment:

    kubectl delete deployment nginx-pod-demo

    最终会控制器,Pod 一并删除并不重建:

    删除 Service:

    kubectl delete svc nginx-demo-svc

    结果如下:

    到此,基础的命令就这些,简单的了解用法即可,具体其它的可以使用 kubectl -h 查看!

  • 相关阅读:
    MDK+VS+Eclipse的STM32库V3.5工程模板的建立(六)
    MDK+VS+Eclipse的STM32库V3.5工程模板的建立(一)
    MDK+VS+Eclipse的STM32库V3.5工程模板的建立(四)
    ognl.OgnlException: target is null for setProperty(null, "username", [Ljava.lang.String;@19af9e98)
    Hibernate联合主键Annotation
    struts2入门第一天配置环境
    为什么java的构造方法中this()或者super()要放在第一行
    几种解决IE6下PNG图片透明问题
    IE6解决min_height
    一个拖拽例子
  • 原文地址:https://www.cnblogs.com/Dy1an/p/12461477.html
Copyright © 2020-2023  润新知