专栏首页彤哥读源码1. 死磕 k8s系列之核心概念介绍

1. 死磕 k8s系列之核心概念介绍

docker入门

核心概念

  • 镜像

类似于虚拟机镜像,可以理解为一个面向Dokcer引擎的只读模板,包含了文件系统。

  • 容器

类似于轻量级的沙箱,Docker利用容器来运行和隔离应用。容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除,但是所有的容器是相互隔离的,互不可见的,这就提供了一个实体机可以安装多个容器,且很轻量级相对于虚拟机。

镜像本身是只读的,容器从镜像启动的时候,Docker会在镜像的最上层创建一个可写层,镜像本身保持不变。

  • 仓库

类似于代码库,是Dokcer集中存放镜像的场所。

根据存储的镜像公开分享与否,Docker仓库可以分为公开仓库(Public)和私有仓库(Private)两种形式。

常用命令

# 镜像列表
docker images
# 移除镜像
docker rmi <image_id>
# 查看镜像
docker search <image_name>
# 拉取镜像
docker pull <image_name>[:tag]
# 运行一个镜像到容器
docker run [OPTIONS] <image_name>[:tag]
# 所有容器
docker ps -a
# 移除一个容器
docker rm <container_id>
# 提交一个容器到镜像
docker commit <container_id> [image_name:tag]
# 推送镜像到仓库
docker push <image_name>[:tag]

k8s入门

核心概念

master,又称为master节点、集群控制面板、控制面板等,它的作用是治理Worker Node。一般来说,master上面不运行任何pod。

Worker Node,又称为worker节点、node节点等,node是机器的抽象,物理机或虚拟机。一般来说,所有的pod都运行在node上。

蓝色部分代表高层抽象,绿色部分代表node层及其子进程。

master包含api server、etcd、scheduler、kube-controller-manager、cloud-controller-manager。

api server,暴露 K8s API,是 K8s 控制的前端,即 kube-apiserver。

etcd,用于集群状态数据的分布式键值存储。

scheduler,调度器,为新 Pod 选择 Node,即 kube-scheduler,可以想象成匹配器

kube-controller-manager,运行控制器来处理集群后台任务的进程,可当做集群控制器。

cloud-controller-manager,运行控制器与云供应商交互,可以当做云接口。

Worker Node 的组件包括 kubelet、kube-proxy 及 container runtime。

kubelet,负责 Worker Node 的一切事务,与 Master 的 API server 通信。

kube-proxy,连接正确 Pod 的路由,也扮演跨 Pod 服务负载均衡的角色。

Container Runtime,容器运行时,下载镜像,运行容器,例如:Docker 就是一个容器运行时。

Deployment,部署,无状态,如果你想持续运行一个无状态的应用,那就用Deployment。Deployment 允许你在无需停机的状态下更新应用,并在 Pod 宕掉时根据策略重启 Pod。

ReplicaSet,无状态,Deployment 会创建 ReplicaSet 来保障你的应用所需 Pod 的数量,ReplicaSet 会基于 Deployment 中的触发器自动创建及伸缩 Pod 数量。老版本中有个名词“Replication Controller”,与ReplicaSet的概念等价。

Pod,是 K8s 的基础构建模块,一个 Pod 包含一组一个或多个容器。通常每个 Pod 包含一个容器。当应用需要水平扩展时,ReplicationSet 会复制 Pod。

StatefulSet,有状态,与 Deployment 不同,StatefulSet 的 Pod 是不可互换的。每个 Pod 都有一个唯一的、持久的标识符,在任何重新调度期间,控制器都要维护这个标识符。StatefulSet 用于持久的、有状态的后端,如数据库。

DaemonSet,用于处理连续的过程,在每个 Node 上运行一个 Pod,每个自动被放入集群的 Node 会通过 DaemonSet 启动 Pod。DaemonSet 对后台运行的任务(如监控和日志收集)非常有用。

StatefulSet 和 DaemonSet 不受 Deployment 控制,虽然两者与 ReplicaSet 位于同级别的抽象层,在当前 API 中没有针对它们更高层级的抽象层了。

PV,PersistentVolumes,持久化卷,与具体的存储关联,可以是本地磁盘,也可以是远程存储设置;

PVC,PersistentVolumeClaims,持久化卷清单,使用PV,Pod只能使用PVC,不与PV直接关联。

Service,Pod的访问入口,有三种类型ClusterIP、NodePort、LoadBalance。

ClusterIP,使用一个集群固定IP,这个是默认选项。
NodePort,使用一个集群固定IP,但是额外在每个pod上均暴露一个端口供外部访问
LoadBalancer,使用集群固定IP,额外还会申请一个负载均衡器来转发到服务(load balancer )

Ingress,通常情况下,service和Pod的IP仅可在集群内部访问。集群外部的请求需要通过负载均衡转发到service在Node上暴露的NodePort上,然后再由kube-proxy将其转发给相关的Pod。

Ingress可以给service提供集群外部访问的URL、负载均衡、SSL终止、HTTP路由等。为了配置这些Ingress规则,集群管理员需要部署一个Ingress controller,它监听Ingress和service的变化,并根据规则配置负载均衡并提供访问入口。常用的Ingress Controller有nginx-ingress和traefik-ingress。

常用命令

# 通过文件名或控制台输入,对资源进行创建。
kubectl create
#通过文件名或控制台输入,对资源进行替换。
kubectl replace
# 通过文件名或控制台输入,对资源进行配置,kubectl apply = kubectl create + kubectl replace。
kubectl apply
# 集群信息
kubectl cluster-info
# 查看组件信息
kubectl get
# 修改组件配置
kubectl edit
# 显示组件详情
kubectl describe
# 删除组件
kubectl delete 
# 查看日志
kubectl logs

istio入门

核心概念

Envoy,一个 C++ 编写的高性能代理服务器,这里做了扩展,在 Istio 中会以 Sidecar 方式跟应用运行在同一 Pod 内,一方面可以接收并执行关于规则、流量拆分等方面的指令,另一方面能够产生各种指标用于监控和跟踪。

Mixer,主要进行访问控制以及策略控制,同时也负责从 Envoy 中获取各项指标。

Pilot,是用户和 Isito 之间的桥梁,负责接收各种配置,并发送给各个组件。

Istio Auth,内置认证和凭证管理,利用 TLS 提供服务之间、用户和服务之间的认证。可以用来将没有加密支持的服务升级为加密版本,并且在网络策略之外,提供服务级别的策略控制,今后还会增加更多的鉴权和审计方面的能力。

常用命令

# 将某个命名空间置为自动注入istio proxy
kubectl label namespace docker-test istio-injection=enabled

本文分享自微信公众号 - 彤哥读源码(gh_63d1b83b9e01),作者:丹卿

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 6. 死磕 k8s系列之windows安装docker客户端

    我们平时开发都是在windows的机器上进行,但是操作docker镜像是需要安装docker客户端的,本文将介绍在windows下安装docker客户端的两种方...

    彤哥
  • 4. 死磕 k8s系列之安装包管理工具(Helm)

    Helm可以看作是k8s集群的包管理工具,通过Helm可以快速安装很多软件,比如mysql,nginx等,当然,也可以把自己的应用交给Helm来管理和安装。

    彤哥
  • 拜托,面试别再问我跳表了!

    考虑一个有序链表,我们要查找3、7、17这几个元素,我们只能从头开始遍历链表,直到查找到元素为止。

    彤哥
  • iOS 仿微信相册选择照片imagePicker(Swift) 序号 预览缩略图

    ZYImagePickerAndBrower 是一个模仿微信相册多选照片的一个控件。注意了微信相册的一些细节,比如序号,最大选择之后照片变灰,浏览缩略图等等。

    ZY_FlyWay
  • Docker第一次使用介绍

    推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。

    李小白是一只喵
  • ​每天 3 分钟,小闫带你学 Python(十七)

    Pleasure in the job puts perfection in the work.

    小闫同学啊
  • 安恒工控安全产品系列之工控漏洞扫描平台VI.0发布!

    安恒信息
  • 【手记】小心在where中使用NEWID()的大坑

    是随机返回0、1、2这三个数,不可能返回其它东西,但是如果把它用在where里面,就会发生很神奇的事情,比如这个查询:

    AhDung
  • 从输入一个URL到页面完全显示发生了什么?

    用户1149564
  • 14.5 NFS客户端问题

    NFS客户端问题 NFS 4版本会有该问题 客户端挂载共享目录后,不管是root用户还是普通用户,创建新文件时属主、属组为nobody 客户端挂载时加上 -o ...

    运维小白

扫码关注云+社区

领取腾讯云代金券