Kubernetes理论or命令
一.k8s的简介理论
理论解析
1.k8s是什么?
Kubernetes是一个轻便的和可扩展的开源平台,用于管理容器化应用和服务。通过Kubernetes能够进行应用的自动化部署和扩缩容。在Kubernetes中,会将组成应用的容器组合成一个逻辑单元以更易管理和发现。
- k8s特性?
①自动化装箱:在不牺牲可用性的条件下,基于容器对资源的要求和约束自动部署容器。
②自愈能力:当容器失败时,会对容器进行重启;当所部署的Node节点有问题时,会对容器进行重新部署和重新调度
③水平扩容:通过简单的命令、用户界面或基于CPU的使用情况,能够对应用进行扩容和缩容。
④服务发现和负载均衡:开发者不需要使用额外的服务发现机制,就能够基于Kubernetes进行服务发现和负载均衡。
⑤自动发布和回滚:Kubernetes能够程序化的发布应用和相关的配置。如果发布有问题,Kubernetes将能够回归发生的变更
⑥保密和配置管理:在不需要重新构建镜像的情况下,可以部署和更新保密和应用配置。
⑦存储编排:自动挂接存储系统,这些存储系统可以来自于本地、公共云提供商(例如:GCP和AWS)、网络存储(例如:NFS、iSCSI、Gluster、Ceph、Cinder和Floker等)。
- k8s结构解析
Kubernetes属于主从分布式架构,主要由Master Node和Worker Node组成,以及包括客户端命令行工具kubectl和其它附加项。
如下:
- Master Node:作为控制节点,对集群进行调度管理;Master Node由API Server、Scheduler、Cluster State Store和Controller-Manger Server所组成;
- Worker Node:作为真正的工作节点,运行业务应用的容器;Worker Node包含kubelet、kube proxy和Container Runtime;
- kubectl:用于通过命令行与API Server进行交互,而对Kubernetes进行操作,实现在集群中进行各种资源的增删改查等操作;
- Add-on:是对Kubernetes核心功能的扩展,例如增加网络和网络策略等能力。
- repliceation 用于伸缩副本数量
- endpoint 用于管理网络请求
- scheduler 调度器
- k8s的结构运行流程
②k8s工作流程:
1、准备好一个包含应用程序的Deployment的yml文件,然后通过kubectl客户端工具发送给ApiServer。
2、ApiServer接收到客户端的请求并将资源内容存储到数据库(etcd)中。
3、Controller组件(包括scheduler、replication、endpoint)监控资源变化并作出反应。
4、ReplicaSet检查数据库变化,创建期望数量的pod实例。
5、Scheduler再次检查数据库变化,发现尚未被分配到具体执行节点(node)的Pod,然后根据一组相关规则将pod分配到可以运行它们的节点上,并更新数据库,记录pod分配情况。
6、Kubelete监控数据库变化,管理后续pod的生命周期,发现被分配到它所在的节点上运行的那些pod。如果找到新pod,则会在该节点上运行这个新pod。
7、kuberproxy运行在集群各个主机上,管理网络通信,如服务发现、负载均衡。例如当有数据发送到主机时,将其路由到正确的pod或容器。对于从主机上发出的数据,它可以基于请求地址发现远程服务器,并将数据正确路由,在某些情况下会使用轮训调度算法(Round-robin)将请求发送到集群中的多个实例。
三.k8s命令使用
kubectl是Kubernetes集群的命令行接口。运行kubectl命令的语法如下所示:
$ kubectl [command] [TYPE] [NAME] [flags]
- comand:指定要对资源执行的操作,例如create、get、describe和delete
- TYPE:指定资源类型,资源类型是大小学敏感的,开发者能够以单数、复数和缩略的形式。
- NAME:指定资源的名称,名称也大小写敏感的。如果省略名称,则会显示所有的资源,例如:
- flags:指定可选的参数。例如,可以使用-s或者–server参数指定Kubernetes API server的地址和端口。
常见基础命令:
1、kubect create 创建一个资源从一个文件或标准输入
1 2 | kubectl create deployment nginx --image=nginx:1.14 kubectl create -f my-nginx.yaml |
2、kubectl run 在集群中运行一个指定的镜像
1 | kubectl run nginx --image=nginx:1.16 --port=80 --replicas=1 |
3、kubectl expose 创建Service对象以将应用程序"暴露"于网络中
1 | kubectl expose deployment/nginx --type="NodePort" --port=80 --name=nginx |
4、kubectl get 显示一个或更多resources资源
1 2 3 4 5 6 7 8 9 10 | kubectl get cs # 查看集群状态 kubectl get nodes # 查看集群节点信息 kubectl get ns # 查看集群命名空间 kubectl get svc -n kube-system # 查看指定命名空间的服务 kubectl get pod <pod-name> -o wide# 查看Pod详细信息 kubectl get pod <pod-name> -o yaml # 以yaml格式查看Pod详细信息 kubectl get pods # 查看资源对象,查看所有Pod列表 kubectl get rc,service # 查看资源对象,查看rc和service列表 kubectl get pod,svc,ep --show-labels # 查看pod,svc,ep能及标签信息 kubectl get all --all-namespaces # 查看所有的命名空间 |
5、kubectl clster-info 显示集群信息
1 | kubectl cluster-info # 查看集群状态信息 |
6、kubectl describe 描述资源对象
1 2 | kubectl describe nodes <node-name> # 显示Node的详细信息 kubectl describe pods/<pod-name> # 显示Pod的详细信息 |
7、kubectl scale pod扩容与缩容
1 2 | kubectl scale deployment nginx --replicas 5 # 扩容 kubectl scale deployment nginx --replicas 3 # 缩容 |