Kubernetes 初体验

简介
Kubernetes 是 Google 团队发起的一个开源项目,它的目标
是管理跨多个主机的容器,用于自动部署、扩展和管理容器
化的应用程序,主要实现语言为 Go 语言。
我们先搭建一套集群让我们来感受下,去体验下里面的一些
概念和用法,等你对这些基本概念熟悉以后,再来讲解
Kubernetes的组件和架构应该就更加容易了。

  1. katacoda:katacoda,可以在网站上帮我们启动一个
    minikube的环境(学习)
    2.Docker for MAC/Windows(推荐)/minikube(本地)
    Docker for MAC/Windows 和 minikube 安装之前需要安
    kubectl工具
    3.kubeadm(测试)
    4.二进制纯手动搭建(生产)
    集群
    集群是一组节点,这些节点可以是物理服务器或者虚拟机,
    在他上面安装了Kubernetes环境。
    在这里插入图片描述
    Master 负责管理集群, master 协调集群中的所有活动,例如调度应用程序、维护应用程序的所需状态、扩展应用程序和滚动更新。节点是 Kubernetes 集群中的工作机器,可以是物理机或虚拟机。每个工作节点都有一个 kubelet,它是管理节点并与Kubernetes Master 节点进行通信的代理。节点上还应具有处理容器操作的容器运行时,例如 Docker 或 rkt。一个Kubernetes 工作集群至少有三个节点。Master 管理集群,而 节点 用于托管正在运行的应用程序。在 Kubernetes 上部署应用程序时,Master 调度容器在集群的节点上运行。 节点使用 Master 公开的 Kubernetes API 与Master 通信。用户也可以直接使用 Kubernetes 的 API 与集群交互。

Pod

Pod 是一组紧密关联的容器集合,它们共享 PID、IPC、
Network 和 UTS namespace,是Kubernetes 调度的基本单位。Pod 的设计理念是支持多个容器在一个 Pod 中共享网络和文件系统,可以通过进程间通信和文件共享这种简单高
效的方式组合完成服务。
namespace 是 linux 内核提供的特性,为虚拟化而生。随着 docker 的诞生引爆了容器技术,也把长期在后台默默奉献的 namespace 技术推到了大家的面前

ll /proc/$$/ns
简称全称说明
ust用来隔离nodename和domainname两个系统标识
ipcInter-ProcessCommunication用来隔离进程间通信
mntMount用来隔离各个进程看到的挂载点视图
userUser用来隔离用户的用户组ID
netNetwork用来隔离网络,IP地址端口等网络栈
pidprocess ID用来隔离进程ID

在这里插入图片描述
在 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

Label

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

  1. 等式,如app=nginx和env!=production

  2. 集合,如env in (production, qa)

  3. 多个label(它们之间是AND关系),如 app=nginx,env=test

Namespace

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

Deployment

Deployment 确保任意时间都有指定数量的 Pod“副本”在运行。如果为某个 Pod 创建了Deployment 并且指定3个副本,它会创建3个 Pod,并且持续监控它们。如果某个 Pod 不响应,那么 Deployment 会替换它,保持总数为3.如果之前不响应的 Pod 恢复了,现在就有4个 Pod 了,那么Deployment 会将其中一个终止保持总数为3。如果在运行中将副本总数改为5,Deployment 会立刻启动2个新 Pod,保证总数为5。Deployment 还支持回滚和滚动升级。当创建 Deployment 时,需要指定两个东西:

  1. Pod模板:用来创建 Pod 副本的模板
  2. Label标签:Deployment 需要监控的 Pod 的标签。
    如果已经创建了 Pod 的一些副本,那么在这些副本上如何均衡负载呢?我们需要的是 Service。

Service

Service 是应用服务的抽象,通过 labels 为应用提供负载均衡和服务发现。匹配 labels 的Pod IP 和端口列表组成endpoints,由 kube-proxy 负责将服务 IP 负载均衡到这些endpoints 上。
每个 Service 都会自动分配一个 cluster IP(仅在集群内部可访问的虚拟地址)和 DNS 名,其他容器可以通过该地址或DNS 来访问服务,而不需要了解后端容器的运行。
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值