1.Kubernetes 简介
Kubernetes Google 开源的容器集群管理系统,其提供应用部署、维护、 扩展机制等 功能,如图 1.3 所示。利用 Kubernetes 能方便地管理跨机器运行容器化的应用,其主要功能 总结如下:
1) 使用 Docker 对应用程序包装 (package) 、实例化 (instantiate) 、运行 (run)
2) 以集群的方式运行、管理跨机器的容器。
3) 解决 Docker 跨机器容器之间的通讯问题。
4) Kubernetes 的自我修复机制使得容器集群总是运行在用户期望的状态。

2.Kubernetes 集群平台组成结构
Kubernetes 总体包含两种角色,一个是 Master 节点,负责集群调度、对外接口、访问 控制、对象的生命周期维护等工作;另一个是 Node 节点,负责维护容器的生命周期,例如 创建、删除、停止 Docker 容器,负责容器的服务抽象和负载均衡等工作。其中 Master 节点 上,运行着三个核心组件:API Server, Scheduler, Controller Mananger Node 节点上运行两 个核心组件Kubelet Kube-Proxy API Server 提供 Kubernetes 集群访问的统一接口, Scheduler, Controller Manager, Kubelet, Kube-Proxy 等组件都通过 API Server 进行通信, API Server 将 Pod,Service,Replication Controller, Daemonset 等对象存储在 ETCD 集群中。 ETCD 是 CoreOS 开发的高效、稳定的强一致性 Key-Value 数据库, ETCD 本身可以搭建成集群对 外服务,它负责存Kubernetes 所有对象的生命周期,是 Kubernetes 的最核心的组件。各 个组件之间的关系详情如图 1-4 所示。
下面先大概介绍一下 Kubernetes 的核心组件的功能:
API Server: 提供了资源对象的唯一操作入口,其他所有的组件都必须通过它提供的 API来操作资源对象。它以 RESTful 风格的 API 对外提供接口。所有 Kubernetes 资源对象的生 命周期维护都是通过调用 API Server 的接口来完成,例如,用户通过 kubectl 创建一个 Pod , 即是通过调用 API Server 的接口创建一个 Pod 对象,并储存在 ETCD 集群中。 Controller Manager: 集群内部的管理控制中心,主要目的是实现 Kubernetes 集群的故障 检测和自动恢复等工作。它包含两个核心组件:Node Controller Replication Controller 。其 中 Node Controller 负责计算节点的加入和退出,可以通过 Node Controller 实现计算节点的 扩容和缩容。Replication Controller 用于 Kubernetes 资源对象 RC 的管理,应用的扩容、缩 容以及滚动升级都是有 Replication Controller 来实现。 Scheduler: 集群中的调度器,负责 Pod 在集群的中的调度和分配。
Kubelet: 负责本 Node 节点上的 Pod 的创建、修改、监控、删除等 Pod 的全生命周期管 理,Kubelet 实时向 API Server 发送所在计算节点( Node )的信息。
Kube-Proxy: 实现 Service 的抽象,为一组 Pod 抽象的服务( Service )提供统一接口并
提供负载均衡功能。

3、基本操作
1 kubectl 语法
kubectl 命令语法如下:
# kubectl [command] [TYPE] [NAME] [flags]
命令语法解析:
command :子命令。
TYPE :资源类型。
NAME :资源名称。
flags :命令参数。
kubectl 命令选项如下:
--alsologtostderr[=false] :同时输出日志到标准错误控制台和文件。
--api-version="" :和服务端交互使用的 API 版本。
--certificate-authority="" :用以进行认证授权的 .cert 文件路径。
--client-certificate="" TLS 使用的客户端证书路径。
--client-key="" TLS 使用的客户端密钥路径。
--cluster="" :指定使用的 kubeconfig 配置文件中的集群名。
--context="" :指定使用的 kubeconfig 配置文件中的环境名。
--insecure-skip-tls-verify[=false] :如果为 true ,将不会检查服务器凭证的有效性,这会 导致 HTTPS 链接变得不安全。
--kubeconfig="" :命令行请求使用的配置文件路径。
--log-backtrace-at= 0 :当日志长度超过定义的行数时,忽略堆栈信息。
--log-dir="" :如果不为空,将日志文件写入此目录。
--log-flush-frequency=5s :刷新日志的最大时间间隔。
--logtostderr[=true] :输出日志到标准错误控制台,不输出到文件。
--match-server-version[=false] :要求服务端和客户端版本匹配。
--namespace="" :如果不为空,命令将使用此 namespace
--password="" APIServer 进行简单认证使用的密码。
-s,--server="" Kubernetes API Server 的地址和端口号。
--stderrthreshold=2 :高于此级别的日志将被输出到错误控制台。
--token="" :认证到 APIServer 使用的令牌。
--user="" :指定使用的 kubeconfig 配置文件中的用户名。
--username="" APIServer 进行简单认证使用的用户名。
--v=0 :指定输出日志的级别。
--vmodule= :指定输出日志的模块。
常用命令如下:
kubectl annotate :更新资源的注解。
kubectl api-versions :以“组 / 版本”的格式输出服务端支持的 API 版本。
kubectl apply :通过文件名或控制台输入,对资源进行配置。
kubectl attach :连接到一个正在运行的容器。
kubectl autoscale :对 replication controller 进行自动伸缩。
kubectl cluster-info :输出集群信息。
kubectl config :修改 kubeconfig 配置文件。
kubectl create :通过文件名或控制台输入,创建资源。
kubectl delete :通过文件名、控制台输入、资源名或者 label selector 删除资源。
kubectl describe :输出指定的一个或多个资源的详细信息。
kubectl edit :编辑服务端的资源。
kubectl exec :在容器内部执行命令。
kubectl expose :输入 rc svc Pod ,并将其暴露为新的 kubernetes service
kubectl get :输出一个或多个资源。
kubectl label :更新资源的 label
kubectl logs :输出 Pod 中一个容器的日志。
kubectl namespace :(已停用)设置或查看当前使用的 namespace
kubectl patch :通过控制台输入更新资源中的字段。
kubectl port-forward :将本地端口转发到 Pod
kubectl proxy :为 Kubernetes API Server 启动代理服务器。
kubectl replace :通过文件名或控制台输入替换资源。
kubectl rolling-update :对指定的 replication controller 执行滚动升级。
kubectl run :在集群中使用指定镜像启动容器。
kubectl scale :为 replication controller 设置新的副本数。
kubectl version :输出服务端和客户端的版本信息。
2 )创建资源对象
使用 kubectl create 命令可进行资源的创建。
根据 Yaml 配置文件一次性创建 service rc
# kubectl create -f my-service.yaml -f my-rc.yaml
根据 <directory> 目录下所有 .yaml .yml .json 文件的定义进行创建操作:
# kubectl create -f <directory>
3 )查看资源对象
查看所有 Pod 列表:
# kubectl get pods
查看 rc service 列表:
# kubectl get rc,service
4 )描述资源对象
显示 Node 的详细信息:
# kubectl describe nodes <node-name>
显示 Pod 的详细信息:
# kubectl describe pods/<pod-name>
显示由 RC 管理的 Pod 的信息:
# kubectl describe pods <rc-name>
5 )删除资源对象
基于 Pod.yaml 定义的名称删除 Pod
# kubectl delete -f pod.yaml
删除所有包含某个 label Pod service
# kubectl delete pods,services -l name=<label-name>
删除所有 Pod
# kubectl delete pods --all
6 )容器操作
执行 Pod data 命令,默认是用 Pod 中的第一个容器执行:
# kubectl exec <pod-name> data
指定 Pod 中某个容器执行 data 命令:
# kubectl exec <pod-name> -c <container-name> data
通过 bash 获得 Pod 中某个容器的 TTY ,相当于登录容器:
# kubectl exec -it <pod-name> -c <container-name> bash
7 Pod 的扩容与缩容
执行扩容缩容 Pod 的操作:
# kubectl scale rc redis --replicas=3
需要确认的是,在 rc 配置文件中定义的 replicas 数量,当执行上述命令的结果大于
replicas 的数量时,则执行的命令相当于扩容操作,反之则为缩容。可以理解为填写的数量
即需要的 Pod 数量。
注意:当需要进行永久性扩容时,不要忘记修改 rc 配置文件中的 replicas 数量。
8 Pod 的滚动升级
执行滚动升级操作:
# kubectl rolling-update redis -f redis-rc.update.yaml
注意:当执行 rolling-update 命令前需要准备好新的 rc 配置文件以及 ConfigMap 配置
文件。 rc 配置文件中需要指定升级后需要使用的镜像名称,或者可以使用 kubeclt
rolling-update redis --image=redis-2.0 命令直接指定镜像名称来直接升级。
Logo

开源、云原生的融合云平台

更多推荐