不会飞的章鱼

熟能生巧,勤能补拙;念念不忘,必有回响。

基于Kubernetes构建企业容器云_企业实践篇

理解Kubernetes理念和架构

传统部署VS虚拟化部署VS容器部署

企业容器云平台架构

Docker编排服务:三驾马车

DOCKER SWART——docker

MESOS——APACHE

kubernates——Google

Kubernates组件架构

Kubernates Master架构

Kubernetes Master组件介绍

API Server

Kubernetes API接口,主要处理 REST操作以及更新Etcd中的对象。所有资源增删改查的唯 一入口。在设计上考虑了水平扩缩的需要,可以构建集群。

Scheduler

集群的资源调度组件,用于绑定Pod到Node上。

Controller Manager

控制器组件,资源对象的自动化控制中心,例如Node Controller、Endpoints Controller 等。

Etcd

Etcd 是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的 后台数据库。所有持久化的状态信息存储在Etcd中。

Kubernetes Node架构

Kubernetes Node组件介绍

Kubelet

一个在集群中每个节点上运行的代理。用于管理Pods以及容器、镜像、Volume等,实现对 集群对节点的管理。

Kube-proxy

kube-proxy 是集群中每个节点上运行的网络代理,实现 Kubernetes Service 概念的一部分。 提供网络代理以及负载均衡,kube-proxy 维护节点上的网络规则。这些网络规则允许从集 群内部或外部的网络会话与 Pod 进行网络通信。

Docker Engine

负责节点的容器的管理工作,Kubernetes 支持多个容器运行环境: Docker、 containerd、 cri-o、 rktlet 以及任何实现 Kubernetes CRI (容器运行环境接口)。

Google内部容器平台Borg

深入理解Kubernetes架构

kubelet的监听端口

  • –port int32
    kubelet 服务监听的本机端口号。(默认值为 10250)已弃用: 在 –config 指定的配置文件中进行设置。

curl http://127.0.0.1:10248/healthz

kube-proxy的监听端口

curl http://127.0.0.1:10256/healthz

  • –healthz-bind-address 0.0.0.0 默认值: 0.0.0.0:10256
    服务健康检查的 IP 地址和端口(对于所有 IPv4 接口设置为 0.0.0.0,对于所有 IPv6 接口设置为 ::)

  • –healthz-port int32 默认值: 10256
    绑定健康检查服务的端口。使用 0 表示禁用。

curl http://127.0.0.1:10249/metrics

  • –metrics-bind-address 0.0.0.0 默认值: 127.0.0.1:10249
    metrics 服务器要使用的 IP 地址(所有 IPv4 接口设置为 0.0.0.0,所有 IPv6 接口设置为 ::

  • –metrics-port int32 默认值: 10249
    绑定 metrics 服务器的端口。使用 0 表示禁用。

应用容器化(Docker)

不可变基础设施(immutable infrastructure)

Docker镜像构建最佳实践

将应用迁移至Kubernetes

将应用迁移到Kubernetes中

容器放置在Pod中

将单个容器或者有依赖 关系的多个容器封装到 Pod中。

控制器管理Pod

使用不同的控制器RC、 RS、Deployment、 Job、Cronjob管理Pod 运行。

管理Pod网络访问

通过Ser v ice、 Endpoint、Ingres s管 理Pod的网络访问。

管 理 P o d 数 据 存 储

通过Volume、PV、 PVC、Storage Class 管理Pod的数据存储。

Kubernetes的最小单位Pod

  • Pod 里只运行一个单独容器 “one- container-per-Pod”
  • Pod 中运行多个有依赖关系的容器

Pod、容器、Volume

Pod的定义

1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: v1 # 版本号 
kind: Pod # Pod
metadata: # 元数据
name: nginx-pod # metadata.name Pod的名称
labels: # metadata.labels 自定义标签列表
app: nginx
spec: # Pod中容器的详细定义
containers: # spec.containers 容器列表
- name: nginx # spec.containers.name 容器名称
image: nginx:1.13.12 # spec.containers.image 容器镜像名称
ports: # 容器需要暴露的端口号列表
- containerPort: 80 # 容器监听的端口号

YAML编写技巧

缩进

  • YAML使用一个固定的缩进风格表示数据层结构关系。 每个缩进级别由两个空格组成
  • 不要使用tabs

冒号

1
2
3
YAML my_key: my_value first_level_dict_key: second_level_dict_key:value_in_second_level_dict 

IN Python {'my_key': 'my_value'} { 'first_level_dict_key': { 'second_level_dict_key': 'value_in_second_level_dict' } }

管理Kubernetes中的应用

------ 本文结束------
如果本篇文章对你有帮助,可以给作者加个鸡腿~(*^__^*),感谢鼓励与支持!