前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >精通Kubernetes1——Kubernetes简介和部署

精通Kubernetes1——Kubernetes简介和部署

作者头像
云原生
发布2021-05-31 11:01:23
1.3K0
发布2021-05-31 11:01:23
举报
文章被收录于专栏:云原生实践

简介

Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。通过Kubernetes你可以:

  • 快速部署应用
  • 快速扩展应用
  • 无缝对接新的应用功能
  • 节省资源,优化硬件资源的使用

架构

Kubernetes 集群里的节点分为 Master 和 Node 两种,其中 Master 是集群的管理控制中心,Node 负责运行应用容器。

Master 上运行的核心组件如下:

  • API Server 是操作资源的唯一入口,提供认证、授权、访问控制、API 注册和发现等功能
  • Scheduler 资源调度,按照预定的调度策略将 Pod 调度到相应的节点上
  • Controller Manager 维护集群状态,比如故障检测、自动扩展、滚动更新等
  • Etcd 保存集群状态

Node 上运行的核心组件如下:

  • Docker 容器引擎,负责镜像管理以及运行容器,也可使用其它容器运行时(Container Runtime)
  • Kubelet 管理容器的生命周期,同时也负责存储卷和网络的管理
  • Kube-proxy 通过维护主机网络规则和连接转发来支持集群里的服务实现和负载均衡

除了核心组件,还有一些推荐的 Add-ons:

  • Kube-dns 为集群内部提供 DNS 服务
  • Ingress Controller 为服务提供外网入口
  • Heapster 资源监控
  • Fluentd 日志采集
  • Dashboard 图形管理界面
  • Federation 管理多个集群

概念

Pod

Pod是Kubernetes创建或部署的最小/最简单的基本单位,一个Pod代表集群上正在运行的一个进程。一个Pod封装一个应用容器(也可以有多个容器),存储资源、一个独立的网络IP以及管理控制容器运行方式的策略选项。Pod代表部署的一个单位:Kubernetes中单个应用的实例,它可能由单个容器或多个容器共享组成的资源。

副本控制器(ReplicationController,RC)

ReplicationController(简称RC)是确保用户定义的Pod副本数保持不变。在用户定义范围内,如果pod增多,则ReplicationController会终止额外的pod,如果减少,RC会创建新的pod,始终保持在定义范围。例如,RC会在Pod维护(例如内核升级)后在节点上重新创建新Pod。

副本集(ReplicaSet,RS)

ReplicaSet(RS)是Replication Controller(RC)的升级版本。ReplicaSet 和 Replication Controller之间的唯一区别是对选择器的支持。ReplicaSet支持labels user guide中描述的set-based选择器要求, 而Replication Controller仅支持equality-based的选择器要求。

部署(Deployment)

Deployment为Pod和Replica Set(升级版的 Replication Controller)提供声明式更新。你只需要在 Deployment 中描述您想要的目标状态是什么,Deployment controller 就会帮您将 Pod 和ReplicaSet 的实际状态改变到您的目标状态。您可以定义一个全新的 Deployment 来创建 ReplicaSet 或者删除已有的 Deployment 并创建一个新的来替换。

服务(Service)

Kubernetes Service 定义了这样一种抽象:一个 Pod 的逻辑分组,一种可以访问它们的策略 —— 通常称为微服务。这一组 Pod 能够被 Service 访问到,通常是通过 Label Selector(查看下面了解,为什么可能需要没有 selector 的 Service)实现的。

任务(Job)

Deployment 代表的是长期运行的应用服务,而短暂运行的应用(比如定时任务)就要用 Job 来表示。Job 有开始和结束,可以使用一个或多个 Pod 来执行。在多个 Pod 上运行时,运行成功可以配置为是其中一个完成还是全部都完成。

后台支撑服务集(DaemonSet)

有时候希望在所有 Node 上都运行某个 Pod,比如网络路由、存储、日志、监控等服务,这个时候就可以使用 DaemonSet。

有状态服务集(StatefulSet)

RS 中的 Pod 只能是无状态的,以便它们可以随时被销毁和重建。但有些时候不是这样,Pod 带有状态,比如数据库服务,在重建 Pod 的时候需要将之前的状态(也就是磁盘数据)恢复。使用 StatefulSet 可以达到此目的。StatefulSet 里的每个 Pod 都有名字,并且可以有顺序。当一个 Pod 被重建时,需要恢复之前的名字和相关资源(比如存储卷)。

集群联邦(Federation)

部署在多个地区的 Kubernetes 集群可以以联邦的方式联合起来组成一个大的集群。每个对联邦的请求都会转发给联邦里的每个集群,每个集群都需要单独完成请求的操作。每个集群都是独立运行的,跟非联邦模式一模一样,它并不知晓自己属于某个联邦。这样就使得 Kubernetes 不用为引入联邦机制而对代码作任何改动。

存储卷(Volume)

在Docker中也有一个docker Volume的概念 ,Docker的Volume只是磁盘中的一个目录,生命周期不受管理。当然Docker现在也提供Volume将数据持久化存储,但支持功能比较少(例如,对于Docker 1.7,每个容器只允许挂载一个Volume,并且不能将参数传递给Volume)。

另一方面,Kubernetes Volume具有明确的生命周期 - 与pod相同。因此,Volume的生命周期比Pod中运行的任何容器要持久,在容器重新启动时能可以保留数据,当然,当Pod被删除不存在时,Volume也将消失。注意,Kubernetes支持许多类型的Volume,Pod可以同时使用任意类型/数量的Volume。

持久存储卷(Persistent Volume,PV)和持久存储卷声明(Persistent Volume Claim,PVC)

就像 Node 提供计算资源,PV 提供了存储资源。PV 是对底层存储服务的抽象,其实现方式可以是本地磁盘,也可以是网络磁盘。PVC 用来描述 Pod 对存储资源的需求,它需要绑定到某个 PV。PV 和 PVC 是一对一关系,而 PV 和 Pod 是多对多关系,单个 PV 可以被多个 Pod 共享,且单个 Pod 可以绑定多个 PV。

节点(Node)

Node是Kubernetes中的工作节点,最开始被称为minion。一个Node可以是VM或物理机。每个Node(节点)具有运行pod的一些必要服务,并由Master组件进行管理,Node节点上的服务包括Docker、kubelet和kube-proxy。有关更多详细信息,请参考架构设计文档中的“Kubernetes Node”部分。

密钥对象(Secret)

Secret 对象用来存放密码、CA 证书等敏感信息,这些信息不适合直接用明文写在 Kubernetes 的对象配置文件里。Secret 对象可以由管理员预先创建好,然后在对象配置文件里通过名称来引用。这样可以降低敏感信息暴露的风险,也便于统一管理。

用户帐号(User Account)和服务帐号(Service Account)

用户帐号为人提供身份标识,而服务帐号为 Kubernetes 集群中的 Pod 提供身份标识。用户帐号与命名空间无关,是跨命名空间的,而服务帐号属于某一个命名空间。

命名空间(Namespace)

命名空间为同一个 Kubernetes 集群里的资源对象提供了虚拟的隔离空间,避免了命名冲突,比如在同一个集群里同时部署测试环境和生产环境服务。Kubernetes 里默认提供了两个命名空间,分别是 default 和 kube-system,前者是资源对象默认所属的空间,后者是 Kubernetes 自身资源对象所属的空间。只有集群管理员能够创建新的命名空间。

RBAC(Role-based Access Control,RBAC)访问授权

使用 RBAC,用户不再直接跟权限进行关联,而是通过角色。角色代表的一组权限,用户可以具备一种或多种角色,从而具有这些角色所包含的权限。如果角色权限有调整,那么所有具有该角色的用户权限自然而然就随之改变。

部署

Kubernetes 官方文档里提供了很多种 部署方式,从源码编译,到本地开发环境部署,再到无需部署直接使用的在线服务,甚至可以只用几个命令就可以在各大 IaaS 平台上部署一个 Kubernetes 集群。我们详细讲解下本地开发环境部署,在这里只介绍MiniKube的部署方式。为了方便起见,我们选择在Windows上用MiniKube部署Kubernetes单节点集群。

Minikube 方式部署的集群支持如下 Kubernetes 特性:

  • DNS 集群内域名解析
  • NodePorts 通过节点主机端口暴露其上容器服务
  • ConfigMaps and Secrets 配置和密钥管理
  • Dashboards Web 控制台
  • Container Runtime 容器运行时,包括 Docker、rkt 和 CRI-O 几种
  • Enabling CNI(Container Network Interface)启用容器网络接口
  • Ingress 对外暴露集群内的服务

配置

先决条件
  • 安装 kubectl

Minikube在不同操作系统上支持不同的驱动

  • Windows
  • VirtualBox 或 Hyper-V - 请参考下文

注:

  • 由于minikube复用了docker-machine,在其软件包中已经支持了相应的VirtualBox, VMware Fusion驱动
  • VT-x/AMD-v 虚拟化必须在 BIOS 中开启
  • 在Windows环境下,如果开启了Hyper-V,不支持VirtualBox方式
安装Minikube

您可以参考 https://minikube.sigs.k8s.io/docs/start/ 安装配置

Windows

下载 minikube-windows-amd64.exe 文件,并重命名为 minikube.exe

检查是否正确安装了MiniKube

代码语言:javascript
复制
PS C:\Users\shengwen\Desktop> minikube version
minikube version: v1.7.2
commit: 50d543b5fcb0e1c0d7c27b1398a9a9790df09dfb

启动

以下命令我们用windows上的powershell来完成

从1.5.0版本开始,Minikube缺省使用本地最好的驱动来创建Kubernetes本地环境

代码语言:javascript
复制
minikube start

为了访问海外的资源,阿里云提供了一系列基础设施,请按照如下参数进行配置。其中常见参数

  • --image-mirror-country cn 将缺省利用 registry.cn-hangzhou.aliyuncs.com/google_containers 作为安装Kubernetes的容器镜像仓库,

- --iso-url=*** 利用阿里云的镜像地址下载相应的 .iso 文件

  • --cpus=2: 为minikube虚拟机分配CPU核数
  • --memory=2000mb: 为minikube虚拟机分配内存数
  • --kubernetes-version=***: minikube 虚拟机将使用的 kubernetes 版本

安装minikube缺省支持的Kubernetes版本

代码语言:javascript
复制
PS C:\Users\cloudnative>  minikube start --vm-driver=virtualbox --image-mirror-country cn --iso-url=https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/iso/minikube-v1.6.0.iso --registry-mirror=https://registry.docker-cn.com
* Microsoft Windows 10 Home China 10.0.18362 Build 18362 上的 minikube v1.7.2
* Using the virtualbox driver based on user configuration
* Reconfiguring existing host ...
* Using the running virtualbox "minikube" VM ...
! 虚拟机无权访问 k8s.gcr.io,或许您需要配置代理或者设置 --image-repository
* 正在 Docker 19.03.5 中准备 Kubernetes v1.17.2…
* 正在启动 Kubernetes ...
* Enabling addons: default-storageclass, storage-provisioner
* 完成!kubectl 已经配置至 "minikube"
! C:\k8s\kubectl.exe 的版本是 1.9.0,且与 Kubernetes 1.17.2 不兼容。您需要更新 C:\k8s\kubectl.exe 或者使用 'minikube kubectl' 连接到这个集群

打开Kubernetes控制台

代码语言:javascript
复制
PS C:\Users\shengwen\Desktop> minikube dashboard
* 正在开启 dashboard ...
* Verifying dashboard health ...
* Launching proxy ...
* Verifying proxy health ...
* Opening http://127.0.0.1:14849/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...

简单操作

集群信息

可以使用kubectl CLI与集群进行交互。这是用于管理Kubernetes和在集群顶部运行的应用程序的主要方法。

群集的详细信息及其运行状况可以通过以下方式发现

代码语言:javascript
复制
PS C:\Users\shengwen\Desktop> kubectl cluster-info
Kubernetes master is running at https://192.168.99.100:8443
KubeDNS is running at https://192.168.99.100:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

使用以下命令查看集群中的节点

代码语言:javascript
复制
PS C:\Users\shengwen\Desktop> kubectl get nodes
NAME       STATUS    ROLES     AGE       VERSION
minikube   Ready     master    29d       v1.17.2

此命令显示可用于承载我们的应用程序的所有节点。现在我们只有一个节点,可以看到它的状态为就绪(可以接受要部署的应用程序了)

部署容器

有了运行中的Kubernetes集群,现在就可以部署容器了。使用 kubectl run,它可以将容器部署到集群上

代码语言:javascript
复制
PS C:\Users\shengwen\Desktop> kubectl run hello-minikube --image=registry.cn-hangzhou.aliyuncs.com/chenshi-kubernetes/echoserver:1.4 --port=8080
replicationcontroller "hello-minikube" created

可以通过运行中的Pods发现部署状态

代码语言:javascript
复制
PS C:\Users\shengwen\Desktop> kubectl get pod
NAME                   READY     STATUS    RESTARTS   AGE
hello-minikube-qcxwm   1/1       Running   0          6h

在 Web 控制台里可查看集群状态和执行管理操作。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 架构
  • 概念
    • Pod
      • 副本控制器(ReplicationController,RC)
        • 副本集(ReplicaSet,RS)
          • 部署(Deployment)
            • 服务(Service)
              • 任务(Job)
                • 后台支撑服务集(DaemonSet)
                  • 有状态服务集(StatefulSet)
                    • 集群联邦(Federation)
                      • 存储卷(Volume)
                        • 持久存储卷(Persistent Volume,PV)和持久存储卷声明(Persistent Volume Claim,PVC)
                          • 节点(Node)
                            • 密钥对象(Secret)
                              • 用户帐号(User Account)和服务帐号(Service Account)
                                • 命名空间(Namespace)
                                  • RBAC(Role-based Access Control,RBAC)访问授权
                                  • 部署
                                    • 配置
                                      • 先决条件
                                      • 安装Minikube
                                    • 启动
                                    • - --iso-url=*** 利用阿里云的镜像地址下载相应的 .iso 文件
                                      • 简单操作
                                        • 集群信息
                                        • 部署容器
                                    相关产品与服务
                                    容器服务
                                    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                                    领券
                                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档