【Kubernetes 的简介及基本组件以及基本使用】
1.Kubernetes 简介Kubernetes 是 Google 开源的容器集群管理系统,其提供应用部署、维护、 扩展机制等功能,如图 1.3 所示。利用 Kubernetes 能方便地管理跨机器运行容器化的应用,其主要功能总结如下:1) 使用 Docker 对应用程序包装(package)、实例化(instantiate)、运行(run)。2) 以集群的方式运行、管理跨机器的容器。3) 解决
·
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
命令直接指定镜像名称来直接升级。
更多推荐
已为社区贡献1条内容
所有评论(0)