k8s 容器部署
目录
Docker
什么是kubernetes
容器部署
k8S
架构和组件
安装
部署方式介绍
kubeadm 部署方式介绍
Docker Compose 容器编排
容器技术的官方定义是:
容器是通过一种虚拟化技术来隔离运行在主机上不同进程,从而达到进程之间、进程和宿主操作系统相互隔离、互不影响的技术。
要理解这个定义,首先要弄清楚容器和虚拟机的区别。
简单来说,虚拟机是一个机器,但容器是一个进程。
每一个虚拟机里面都有一套完整的操作系统,而容器层安装在操作系统之上,它直接利用了宿主机的内核,更加轻量化,启动速度极快。通常,我们在会每个容器里面跑单个的应用,而在虚拟机里会跑很多应用。下图展示了虚拟机和容器的不同。

容器技术具有:简化部署、快速启动、服务组合、易于迁移等优点。
Docker
最流行的开源容器引擎:Docker
谈到容器,就不能不讲Docker。Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
Docker把容器变得标准化了。要理解Docker,你需要明白三个最主要的概念:容器、镜像、仓库。
-
容器是运行在虚拟机上的进程。
-
镜像是一种存储形式,可以理解为数据或应用的副本。
-
仓库是用来存储镜像的。
Docker能够普遍使用起来,很大程度上个得益于Docker的仓库里汇集了很多已经标准化的镜像,大大提升了部署效率。
什么是kubernetes
了解了容器和Docker,再来看kubernetes的定义就很容易理解了。
上文提到,Kubernetes是用于自动部署、扩展和容器化应用程序的开源系统。
当我们使用的容器服务多了,面临的访问量增大以后,我们就需要一种工具把这些容器统一的管理起来,需要实现对这些容器的自动部署、扩展和管理。也就是俗称的容器编排。
Kubernetes就是这样一种容器编排系统。

上图是Kubernetes的架构图。
从大的模块看,图中包含Master组件(APIs, scheduler, etc),Node节点和cloud端。
Master中,包含负责提供API服务的组件kube-apiserver;作为后台数据库的etcd,监听组件kube-scheduler;运行控制器的组件kube-controller-manager。
Node节点中包括运行在各个节点的客户端的kubelet,运行在各个节点的网络代理组件kube-proxy,支持运行容器底层环境的软件Container Runtime。
Cloud端作为集群外部的附加能力,通过与cloud-controller-manager组件对接,扩展k8s集群云上动态扩展的特性。
原文链接:https://blog.csdn.net/SinnetCloud/article/details/105580566
容器部署
分布式集群容器选择Docker,k8s进行容器管理。
容器:方便做持续集成并有助于整体发布的虚拟化技术。 容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。
一次构建,随处运行
-
更快速的应用交付和部署
-
更便捷的升级和扩缩容
-
更简单的系统运维
-
更高效的计算资源利用
k8S

k8s 是kubernets的缩写,’8‘代表中间的八个字符。
其实 Docker 和 k8s 并非直接的竞争对手,它俩相互依存。 Docker 是一个容器化平台,而 k8s 是 Docker 等容器平台的协调器。
随着容器越来越多出现了一系列新问题:
-
如何协调和调度这些容器?
-
如何在升级应用程序时不会中断服务?
-
如何监视应用程序的运行状况?
-
如何批量重新启动容器里的程序?
解决这些问题需要容器编排技术,可以将众多机器抽象,对外呈现出一台超大机器。现在业界比较流行的有:k8s、Mesos、Docker Swarm。
在业务发展初期只有几个微服务,这时用 Docker 就足够了,但随着业务规模逐渐扩大,容器越来越多,运维人员的工作越来越复杂,这个时候就需要编排系统解救opers。

架构和组件
k8s 由众多组件组成,组件间通过 API 互相通信,归纳起来主要分为三个部分:
-
Controller Manager,即控制平面,用于调度程序以及节点状态检测。
-
Nodes,构成了Kubernetes集群的集体计算能力,实际部署容器运行的地方。
-
Pods,Kubernetes集群中资源的最小单位。
k8s集群架构图

https://juejin.cn/post/6913568633813729294
安装
https://blog.csdn.net/iiothub/article/details/135929132
# Kuberneteshttps://iothub.org.cn/docs/kubernetes/https://iothub.org.cn/docs/kubernetes/pro/deploy-kubernetes/
部署方式介绍
目前生产部署 Kubernetes 集群主要有两种方式:
kubeadm Kubeadm 是一个 K8s 部署工具, 提供 kubeadm init 和 kubeadm join, 用于快速部 署 Kubernetes 集群。 官方地址: https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
二进制包 从 github 下载发行版的二进制包, 手动部署每个组件, 组成 Kubernetes 集群。 Kubeadm 降低部署门槛, 但屏蔽了很多细节, 遇到问题很难排查。 如果想更容易可 控, 推荐使用二进制包部署 Kubernetes 集群, 虽然手动部署麻烦点, 期间可以学习很 多工作原理, 也利于后期维护。
kubeadm 部署方式介绍
kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具, 这个工具能通 过两条指令完成一个 kubernetes 集群的部署: 第一、 创建一个 Master 节点 kubeadm init 第二, 将 Node 节点加入到当前集群中 $ kubeadm join <Master 节点的 IP 和端口 >
这个工具能通过两条指令完成一个kubernetes集群的部署:
创建一个 Master 节点$ kubeadm init将一个 Node 节点加入到当前集群中$ kubeadm join <Master节点的IP和端口 >
环境准备
host文件、时间同步、安装docker
部署高可用kubernetes集群

节点配置
| 主机名 | IP地址 | 角色 |
|---|---|---|
| k8s-master1 | 172.51.216.81 | master |
| k8s-master2 | 172.51.216.82 | master |
| k8s-master3 | 172.51.216.83 | master |
| k8s-node1 | 172.51.216.84 | node |
| k8s-node2 | 172.51.216.85 | node |
| k8s-node3 | 172.51.216.86 | node |
| k8s-node4 | 172.51.216.87 | node |
| VIP(虚拟ip) | 172.51.216.90 | vip |
Docker Compose 容器编排
容器编排工具
-
docker machine
-
在虚拟机中部署docker容器引擎的工具
-
-
docker compose
-
是一个用于定义和运行多容器Docker的应用程序工具
-
-
docker swarm
-
是Docker Host主机批量管理及资源调度管理工具
-
-
mesos+marathon
-
mesos 对计算机计算资源进行管理和调度
-
marathon 服务发现及负载均衡的功能
-
-
kubernetes
-
google开源的容器编排工具
-
