0
点赞
收藏
分享

微信扫一扫

【Kubernetes 的简介及基本组件以及基本使用】

624c95384278 2022-03-16 阅读 45

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 ManangerNode 节点上运行两

个核心组件:KubeletKube-ProxyAPI 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、基本操作

1kubectl 语法

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:输入 rcsvc 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

7Pod 的扩容与缩容

执行扩容缩容 Pod 的操作:

# kubectl scale rc redis --replicas=3

需要确认的是,在 rc 配置文件中定义的 replicas 数量,当执行上述命令的结果大于

replicas 的数量时,则执行的命令相当于扩容操作,反之则为缩容。可以理解为填写的数量

即需要的 Pod 数量。

注意:当需要进行永久性扩容时,不要忘记修改 rc 配置文件中的 replicas 数量。

8Pod 的滚动升级

执行滚动升级操作:

# kubectl rolling-update redis -f redis-rc.update.yaml

注意:当执行 rolling-update 命令前需要准备好新的 rc 配置文件以及 ConfigMap 配置

文件。rc 配置文件中需要指定升级后需要使用的镜像名称,或者可以使用 kubeclt

rolling-update redis --image=redis-2.0 命令直接指定镜像名称来直接升级。

举报

相关推荐

0 条评论