开发者社区> 问答> 正文

小白求助:零基础入门kubernetes需要哪些知识?

小白求助:零基础入门kubernetes需要哪些知识?

展开
收起
保持可爱mmm 2020-02-28 17:04:16 6364 0
3 条回答
写回答
取消 提交回答
  • 建议kubernetes 查看官网文档,文档还是比较齐全的https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ 有条件可以考个CKA认证

    2020-03-02 22:05:40
    赞同 展开评论 打赏
  • 一 容器

    在学习k8s前,首先要了解和学习容器概念和工作原理。

    什么是容器?

    容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。开发人员在自己笔记本上创建并测试好的容器,无需任何修改就能够在生产系统的虚拟机、物理服务器或公有云主机上运行。

    容器的优势

    容器使软件具备了超强的可移植能力。
    对于开发人员 – Build Once, Run Anywhere
    容器意味着环境隔离和可重复性。开发人员只需为应用创建一次运行环境,然后打包成容器便可在其他机器上运行。另外,容器环境与所在的 Host 环境是隔离的,就像虚拟机一样,但更快更简单。
    对于运维人员 – Configure Once, Run Anything
    只需要配置好标准的 runtime 环境,服务器就可以运行任何容器。这使得运维人员的工作变得更高效,一致和可重复。容器消除了开发、测试、生产环境的不一致性。

    Docker概念

    “Docker” 一词指代了多个概念,包括开源社区项目、开源项目使用的工具、主导支持此类项目的公司 Docker Inc. 以及该公司官方支持的工具。技术产品和公司使用同一名称,的确让人有点困惑。
    我们来简单说明一下:
    IT 软件中所说的 “Docker” ,是指容器化技术,用于支持创建和使用容器。
    开源 Docker 社区致力于改进这类技术,并免费提供给所有用户,使之获益。
    Docker Inc. 公司凭借 Docker 社区产品起家,它主要负责提升社区版本的安全性,并将技术进步与广大技术社区分享。此外,它还专门对这些技术产品进行完善和安全固化,以服务于企业客户。
    借助 Docker,您可将容器当做轻巧、模块化的虚拟机使用。同时,您还将获得高度的灵活性,从而实现对容器的高效创建、部署及复制,并能将其从一个环境顺利迁移至另一个环境,从而有助于您针对云来优化您的应用。
    Docker有三大核心概念:
    镜像(Image)是一个特殊的文件系统,提供容器运行时所需的程序、库、配置等,构建后不会改变
    容器(Container)实质是进程,拥有自己独立的命名空间。
    仓库(Repository)一个仓库可以包含多个标签(Tag),每个标签对应一个镜像

    容器工作原理

    Docker 技术使用 Linux 内核和内核功能(例如 Cgroups 和 namespaces)来分隔进程,以便各进程相互独立运行。这种独立性正是采用容器的目的所在;它可以独立运行多种进程、多个应用,更加充分地发挥基础设施的作用,同时保持各个独立系统的安全性。

    二 Kubernetes入门知识指南

    Kubernets的知识都可以在官方文档查询,网址如下:
    https://kubernetes.io/zh/docs/home/

    Kubernetes基础知识

    Kubernetes是什么?

    Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。
    为什么需要 Kubernetes
    容器是打包和运行应用程序的好方式。在生产环境中,您需要管理运行应用程序的容器,并确保不会停机。例如,如果一个容器发生故障,则需要启动另一个容器。如果由操作系统处理此行为,会不会更容易?
    Kubernetes 为您提供:
    服务发现和负载均衡
    Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果到容器的流量很大,Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。
    存储编排
    Kubernetes 允许您自动挂载您选择的存储系统,例如本地存储、公共云提供商等。 自动部署和回滚
    您可以使用 Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态更改为所需状态。例如,您可以自动化 Kubernetes 来为您的部署创建新容器,删除现有容器并将它们的所有资源用于新容器。
    自动二进制打包
    Kubernetes 允许您指定每个容器所需 CPU 和内存(RAM)。当容器指定了资源请求时,Kubernetes 可以做出更好的决策来管理容器的资源。
    自我修复
    Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。
    密钥与配置管理
    Kubernetes 允许您存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。您可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。

    Kubernetes 组件

    初学者首先要了解Kubernetes的基本概念,包括master、node、pod等。
    Master
    Master是Kubernetes集群的大脑,运行着的守护进程服务包括kube-apiserver、kube-scheduler、kube-controller-manager、etcd和Pod网络等。
    kube-apiserver
    主节点上负责提供 Kubernetes API 服务的组件;它是 Kubernetes 控制面的前端。
    kube-apiserver 在设计上考虑了水平扩缩的需要。 换言之,通过部署多个实例可以实现扩缩。
    etcd
    etcd 是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库。
    您的 Kubernetes 集群的 etcd 数据库通常需要有个备份计划。
    kube-scheduler
    主节点上的组件,该组件监视那些新创建的未指定运行节点的 Pod,并选择节点让 Pod 在上面运行。
    调度决策考虑的因素包括单个 Pod 和 Pod 集合的资源需求、硬件/软件/策略约束、亲和性和反亲和性规范、数据位置、工作负载间的干扰和最后时限。
    kube-controller-manager
    在主节点上运行控制器的组件。
    从逻辑上讲,每个控制器都是一个单独的进程,但是为了降低复杂性,它们都被编译到同一个可执行文件,并在一个进程中运行。
    这些控制器包括:
    节点控制器(Node Controller): 负责在节点出现故障时进行通知和响应。
    副本控制器(Replication Controller): 负责为系统中的每个副本控制器对象维护正确数量的 Pod。
    端点控制器(Endpoints Controller): 填充端点(Endpoints)对象(即加入 Service 与 Pod)。
    服务帐户和令牌控制器(Service Account & Token Controllers): 为新的命名空间创建默认帐户和 API 访问令牌.
    云控制器管理器-(cloud-controller-manager)
    cloud-controller-manager 运行与基础云提供商交互的控制器
    cloud-controller-manager 仅运行云提供商特定的控制器循环。您必须在 kube-controller-manager 中禁用这些控制器循环,您可以通过在启动 kube-controller-manager 时将 --cloud-provider 参数设置为 external 来禁用控制器循环。
    cloud-controller-manager 允许云供应商的代码和 Kubernetes 代码彼此独立地发展。在以前的版本中,核心的 Kubernetes 代码依赖于特定云提供商的代码来实现功能。在将来的版本中,云供应商专有的代码应由云供应商自己维护,并与运行 Kubernetes 的云控制器管理器相关联。
    以下控制器具有云提供商依赖性:
    节点控制器(Node Controller): 用于检查云提供商以确定节点是否在云中停止响应后被删除
    路由控制器(Route Controller): 用于在底层云基础架构中设置路由
    服务控制器(Service Controller): 用于创建、更新和删除云提供商负载均衡器
    数据卷控制器(Volume Controller): 用于创建、附加和装载卷、并与云提供商进行交互以编排卷
    Node
    节点组件在每个节点上运行,维护运行 Pod 并提供 Kubernetes 运行环境。
    kubelet
    一个在集群中每个节点上运行的代理。它保证容器都运行在 Pod 中。
    kubelet 接收一组通过各类机制提供给它的 PodSpecs,确保这些 PodSpecs 中描述的容器处于运行状态且健康。kubelet 不会管理不是由 Kubernetes 创建的容器。
    kube-proxy
    kube-proxy 是集群中每个节点上运行的网络代理,实现 Kubernetes Service 概念的一部分。
    kube-proxy 维护节点上的网络规则。这些网络规则允许从集群内部或外部的网络会话与 Pod 进行网络通信。
    如果有 kube-proxy 可用,它将使用操作系统数据包过滤层。否则,kube-proxy 会转发流量本身。
    容器运行环境(Container Runtime)
    容器运行环境是负责运行容器的软件。
    Kubernetes 支持多个容器运行环境: Docker、 containerd、cri-o、 rktlet 以及任何实现 Kubernetes CRI (容器运行环境接口)。
    Pod
    在Kubernetes中,最小的管理元素不是一个个独立的容器,而是Pod。Pod是管理,创建,计划的最小单元.
    一个Pod相当于一个共享context的配置组,在同一个context下,应用可能还会有独立的cgroup隔离机制,一个Pod是一个容器环境下的“逻辑主机”,它可能包含一个或者多个紧密相连的应用,这些应用可能是在同一个物理主机或虚拟机上。
    Pod 的context可以理解成多个linux命名空间的联合
    PID 命名空间(同一个Pod中应用可以看到其它进程)
    网络 命名空间(同一个Pod的中的应用对相同的IP地址和端口有权限)
    IPC 命名空间(同一个Pod中的应用可以通过VPC或者POSIX进行通信)
    UTS 命名空间(同一个Pod中的应用共享一个主机名称)
    同一个Pod中的应用可以共享磁盘,磁盘是Pod级的,应用可以通过文件系统调用。 由于docker的架构,一个Pod是由多个相关的并且共享磁盘的容器组成,Pid的命名空间共享还没有应用到Docker中
    和相互独立的容器一样,Pod是一种相对短暂的存在,而不是持久存在的,正如我们在Pod的生命周期中提到的,Pod被安排到结点上,并且保持在这个节点上直到被终止(根据重启的设定)或者被删除,当一个节点死掉之后,上面的所有Pod均会被删除。特殊的Pod永远不会被转移到的其他的节点,作为替代,他们必须被replace.

    三 通过kubeadm方式创建一个kubernetes

    对kubernetes的概念和组件有所了解以后,就可以通过kubeadm的方式创建一个kubernetes集群。

    安装前准备工作

    创建虚拟机
    创建至少2台虚拟机,可以在本地或者公有云。
    下载部署软件
    需要下载的软件包括calico、demo-images、docker-ce、kube、kube-images、kubectl、metrics-server

    安装部署

    具体安装过程参考官网文档:
    https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm/

    四 安装后的练习

    安装后详读官方文档,做下面这些组件的练习操作,要达到非常熟练的程度。

    Node

    Namespace

    Pod

    Deployment

    DaemonSet

    Service

    Job

    Static Pod

    ConfigMap

    Secrets

    Volume

    Init-containers

    Affinity and Anti-Affinity

    Monitor and logs

    Taints and Tolerations

    Cordon and Drain

    Backing up etcd

    这些内容都非常熟练以后,基本就达到了入门的水平。

    2020-03-02 11:09:17
    赞同 1 展开评论 打赏
  • java菜鸟

    要想学习kubernetes,首先你要先去了解kubernetes的前世今生,Kubernetes是什么?它不是简单的master/worker,controller/apiserver/etcd/scheduler等等一些二进制及配置文件。也不仅仅是pod/deployment/service/daemonset等等一些部署单元,也更不是一个简单的PAAS平台。它是一个体系,包含了软件工程管理、软件开发模型和理念、项目管理、架构设计、运维管理、交付管理等等,除此之外才是一个类PAAS平台 如果要真正能了解Kubernetes,除了学习基础的Linux,你还需要了解什么才算入门? 1、微服务架构,及微服务能解决的问题 2、对应微服务的语言生态,如JAVA、GO、Python等 3、基础的软件配置管理,如代码管理、CI/CD、版本管理 4、基础的生产维护管理,如变更管理、流程管理、监控、成本管理等 5、其它运维知识,如基础网络、中间件、运维工具等

    当然你最好准备一台随时随地使用的云服务啦,学习k8s不再是梦!

    2020-02-28 17:19:02
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
ACK 云原生弹性方案—云原生时代的加速器 立即下载
ACK集群类型选择最佳实践 立即下载
企业运维之云原生和Kubernetes 实战 立即下载