KUBERNETES 基础(1)

时间:2021-02-18 13:02:14   收藏:0   阅读:0

KUBERNETES 基础(1)

1. Kubernetes 初体验

1.1 简介

Kubernetes 是 Google 团队发起的?个开源项?,它的?标是管理跨多个主机的容器,?于?动部
署、扩展和管理容器化的应?程序,主要实现语?为 Go 语?。Kubernetes 的组件和架构还是相对较复杂的,如果我们?上来就给?家讲解这些概念,可能很多同学都消化不了,所以我们先让我们的同学来使?我们的Kubernetes,去感受下,去体验下??的?些概念和?法,等你对这些基本概念熟悉

以后,再来给?家讲解Kubernetes的组件和架构应该就更加容易了。

怎样体验呢?当然最好的办法就是我们??搭建?套集群了,但是如果完完全全都我们?动去搭建的话,第?是太耗时,第?是太复杂,可能我们现在还没有这个实?,没关系,我们可以使??些?具来辅助我们。

1.katacoda 的课程:katacoda,可以在?站上帮我们启动?个minikube的环境(学习)

技术图片

2.需要我们自己来搭建的 - Rancher,我们之前给大家介绍过,如果你网速不好的话安装 Rancher 可能需要花费一点时间,不过这是值得的。(测试)

[root@docker ~]# docker run -d --restart=unless-stopped --name=rancher -p 80:80 -p 443:443 rancher/rancher:v2.0.0

# 查看日志
[root@docker ~]# docker logs -f rancher

技术图片

3.Docker for MAC/Windows(推荐)/minikube/(本地)

Docker for MAC/Windows 和 minikube 安装之前需要安装kubectl工具

4.kubeadm(测试)

5.二进制纯手动搭建(生产)

1.2 集群

集群是一组节点,这些节点可以是物理服务器或者虚拟机,在他上面安装了Kubernetes环境。

技术图片

Master 负责管理集群, master 协调集群中的所有活动,例如调度应用程序、维护应用程序的所需状态、扩展应用程序和滚动更新。 节点是 Kubernetes 集群中的工作机器,可以是物理机或虚拟机。每个工作节点都有一个 kubelet,它是管理节点并与 Kubernetes Master 节点进行通信的代理。节点上还应具有处理容器操作的容器运行时,例如 Dockerrkt。一个 Kubernetes 工作集群至少有三个节点。 Master 管理集群,而节点 用于托管正在运行的应用程序。

当您在 Kubernetes 上部署应用程序时,您可以告诉 master 启动应用程序容器。Master 调度容器在集群的节点上运行。 节点使用 Master 公开的 Kubernetes API 与 Master 通信。用户也可以直接使用 Kubernetes 的 API 与集群交互。

1.3 Pod

Pod 是一组紧密关联的容器集合,它们共享 PID、IPC、Network 和 UTS namespace,是Kubernetes 调度的基本单位。Pod 的设计理念是支持多个容器在一个 Pod 中共享网络和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。

技术图片

在 Kubernetes 中,所有对象都使用 manifest(yaml或json)来定义,比如一个简单的 nginx 服务可以定义为 nginx.yaml,它包含一个镜像为 nginx 的容器:

apiVersion: v1
kind: Pod
metadata:  
  name: nginx  
  labels:    
    app: nginx
spec:  
  containers:  
  - name: nginx    
    image: nginx    
    ports:    
    - containerPort: 80

1.4 Label

Label 是识别 Kubernetes 对象的标签,以 key/value 的方式附加到对象上(key最长不能超过63字节,value 可以为空,也可以是不超过253字节的字符串)。 Label 不提供唯一性,并且实际上经常是很多对象(如Pods)都使用相同的 label 来标志具体的应用。 Label 定义好后其他对象可以使用 Label Selector 来选择一组相同 label 的对象(比如Service 用 label 来选择一组 Pod)。Label Selector支持以下几种方式:

  • [x] 等式,如app=nginx和env!=production

1.5 Namespace

Namespace 是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或用户组。常见的 pods, services,deployments 等都是属于某一个 namespace 的(默认是default),而 Node, PersistentVolumes 等则不属于任何 namespace。

1.6 Deployment

是否手动创建 Pod,如果想要创建同一个容器的多份拷贝,需要一个个分别创建出来么,能否将Pods划到逻辑组里?

Deployment 确保任意时间都有指定数量的 Pod“副本”在运行。如果为某个 Pod 创建了Deployment 并且指定3个副本,它会创建3个 Pod,并且持续监控它们。如果某个 Pod 不响应,那么 Deployment 会替换它,保持总数为3.

如果之前不响应的 Pod 恢复了,现在就有4个 Pod 了,那么 Deployment 会将其中一个终止保持总数为3。如果在运行中将副本总数改为5,Deployment 会立刻启动2个新 Pod,保证总数为5。Deployment 还支持回滚和滚动升级。

当创建 Deployment 时,需要指定两个东西:

  • [x] Pod模板:用来创建 Pod 副本的模板

现在已经创建了 Pod 的一些副本,那么在这些副本上如何均衡负载呢?我们需要的是 Service。

1.7 Service

Service 是应用服务的抽象,通过 labels 为应用提供负载均衡和服务发现。匹配 labels 的Pod IP 和端口列表组成 endpoints,由 kube-proxy 负责将服务 IP 负载均衡到这些endpoints 上。

每个 Service 都会自动分配一个 cluster IP(仅在集群内部可访问的虚拟地址)和 DNS 名,其他容器可以通过该地址或 DNS 来访问服务,而不需要了解后端容器的运行。

技术图片

2. 基本概念与组件

2.1 基本概念

Kubernetes 中的绝大部分概念都抽象成 Kubernetes 管理的一种资源对象,下面我们一起复习一下我们上节课遇到的一些资源对象:

技术图片

2.2 组件通信

Kubernetes 多组件之间的通信原理:

比如最典型的创建 Pod 的流程:

技术图片

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!