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 查看!

原文地址:https://www.cnblogs.com/Dy1an/p/12461477.html