大数据-玩转数据-深入浅出K8S

本文对比了Docker和虚拟机的区别,详细介绍了如何使用Kubernetes(K8S)搭建集群,包括K8S的架构、Master节点和Node节点的角色。通过Kubeadm进行环境初始化、Docker安装、Kubernetes组件安装,最后部署Dashboard并进行测试,展示了K8S管理Docker容器的高效性。
摘要由CSDN通过智能技术生成

一、K8S和Docker的比较

Docker 是一个开源的、轻量级的容器引擎,和 VMware 虚拟机相比,Docker 使用容器承载应用程序,而不使用操作系统,所以它的开销很少,性能很高。但是,Docker 对应用程序的隔离不如虚拟机彻底,所以它并不能完全取代 VMware。

在传统的开发过程中(我之前的开发过程),以Java为例,一般都是本地(开发机)开发运行然后打成jar、war包放到服务器上,然后在服务器上部署相关环境(JDK、Redis、Mysql、Nginx等),非常麻烦。一款产品开发–上线是两套不同的环境,应用环境,应用配置都是不同的,很容易导致的问题是:为什么在本地可以运行,部署后出现问题,版本更新后为什么导致服务不可用,对于运维来说考验十分大。

环境配置是十分的麻烦(对Linux不熟悉的同学经常会出现各种各样奇葩的问题,甚至把环境搞脏),对于集群每一个都要部署环境(集群Redis、ES、Hadoop…) 费事费力。发布一个项目( jar + (Redis MySQL JDK ES) ),项目能不能带上环境安装打包。

基于以上问题,Dokcer提出了解决方案。

相信很多人都用过虚拟机,虚拟机,就是在你的操作系统里面,装一个软件,然后通过这个软件,再模拟一台甚至多台“子电脑”出来。 在“子电脑”里,你可以和正常电脑一样运行程序,例如开QQ。如果你愿意,你可以变出好几个“子电脑”,里面都开上QQ。“子电脑”和“子电脑”之间,是相互隔离的,互不影响。虚拟机属于虚拟化技术。而Docker这样的容器技术,也是虚拟化技术,属于轻量级的虚拟化。

虚拟机虽然可以隔离出很多“子电脑”,但占用空间更大,启动更慢,虚拟机软件可能还要花钱(例如VMWare)。而容器技术恰好没有这些缺点。它不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境(类似“沙箱”)。

比较Docker和虚拟机技术的不同:

传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件。
Docker:容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了
每个容器间是互相隔离,每个容器内都有一个属于自己的文件系统,互不影响

但需要注意的是: Docker本身并不是容器,它是创建容器的工具,是应用容器引擎。

Docker技术的三大核心概念,分别是:

镜像(Image)
容器(Container)
仓库(Repository)
对于Docker来说,其作用可概况为:搭建,发送,运行。即将相关内容包括环境等等打包成一个镜像,然后放到仓库里,需要时进行下载运行即可。复杂繁琐。

单看图示上部分,发生的变化仅仅是HOST换成了Pod,底层网络由真实网络换成了覆盖网络,即虚拟网络。对于APP应用开发者而言,即使你完全不懂容器技术也没关系,Kubernetes提供的抽象层对于APP应用开发者而言是完全透明的。应用在POD中和在HOST主机上并没有本质区别。 k8s是一个开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。

也就是说k8s跟Docker的粒度是不同的,K8S用于对Docker及容器进行更高级更灵活的管理 ,K8S管理更加容易简单。

二、K8S 架构

在这里插入图片描述
一个K8S系统,通常称为一个K8S集群(Cluster)。
这个集群主要包括两个部分:
一个Master节点(主节点)
一群Node节点(计算节点)

Master节点:
API Server、Scheduler、Controller-manager、etcd。

  • API Server是整个系统的对外接口,供客户端和其它组件调用,相当于“营业厅”
  • Scheduler负责对集群内部的资源进行调度,相当于“调度室”,定义Pod的访问规则
  • Controller manager负责管理控制器,相当于“大总管”,确保预期的Pod数量,无状态应用部署和有状态应用部署,确保所有node应用同一Pod,一次性任务和定时任务等
  • etcd存储系统,保存存储相关数据

Node节点:
Docker、kubelet、kube-proxy、Fluentd、kube-dns(可选),还有就是Pod

  • Docker 进行容器化操作的工具
  • kubelet 是master 派到node节点的代表,管理本机容器
  • kube-proxy提供网络代理,负载均衡等操作
  • Pod是Kubernetes最基本的操作单元。一个Pod代表着集群中运行的一个进程,它内部封装了一个或多个紧密相关的容器,一个Pod中的容器是共享网络的,生命周期是短暂的

三、K8S集群搭建

3.1、kubernetes 官方提供的三种部署方式

minikube:
Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,仅用于尝试Kubernetes或日常开发的用户使用。部署地址:https://kubernetes.io/docs/setup/minikube/
kubeadm:
Kubeadm也是一个工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。部署地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
二进制包:
推荐,从官方下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。下载地址:https://github.com/kubernetes/kubernetes/releases

3.2 、安装kubeadm环境准备

以下操作,在三台节点都执行
环境需求:centos 7.4 +
硬件需求:CPU>=2c ,内存>=2G
环境角色

IP 角色 安装软件
192.168.73.138 k8s-Master kube-apiserver
kube-schduler
docker
flannel
kubelet
192.168.73.139 k8s-node01 kubelet
kube-proxy
docker
flannel
192.168.73.140 k8s-node02 kubelet
kube-proxy
docker
flannel

3.3 、环境初始化

以下所有操作,在三台节点全部执行
1、关闭防火墙及selinux

关防火墙

$ systemctl stop firewalld  # 临时
$ systemctl disable firewalld # 永久

关闭selinux

$ sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config  # 永久
$ setenforce 0 # 临时

2、关闭 swap 分区

$ swapoff -a # 临时
$ sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab #永久

3、分别在192.168.73.138、192.168.73.139、192.168.73.140上设置主机名及配置hosts

$ hostnamectl set-hostname k8s-master
#(192.168.73.138主机打命令)
$ hostnamectl set-hostname k8s-node01(192.168.73.139
主机打命令
$ hostnamectl set-hostname k8s-node02 (192.168.73.140
主机打命令

4、在所有主机上上添加如下命令

$ cat >> /etc/hosts << EOF 192.168.73.138 k8s-master 192.168.73.139 k8s-node01 192.168.73.140 k8s-node02 EOF

5、内核调整,将桥接的IPv4流量传递到iptables的链

$ cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
$ sysctl --system

6、设置系统时区并同步时间服务器

# yum install -y ntpdate

                
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kubernetes 原理剖析与实战应用】 开篇 | 如何深入掌握 Kubernetes? 云原生基石:初识 Kubernetes 01 | 前世今生:Kubernetes 是如何火起来的? 02 | 高屋建瓴:Kubernetes 的架构为什么是这样的? 03 | 集群搭建:手把手教你玩转 Kubernetes 集群搭建 04 | 核心定义:Kubernetes 是如何搞定“不可变基础设施”的? 「关注公众号【云世】,免费获取全系列课程内容」 05 | K8s Pod:最小调度单元的使用进阶及实践 Kubernetes 进阶:部署高可用的业务 06 | 无状态应用:剖析 Kubernetes 业务副本及水平扩展底层原理 07 | 有状态应用:Kubernetes 如何通过 StatefulSet 支持有状态应用? 08 | 配置管理:Kubernetes 管理业务配置方式有哪些? 09 | 存储类型:如何挑选合适的存储插件? 10 | 存储管理:怎样对业务数据进行持久化存储? 11 | K8s Service:轻松搞定服务发现和负载均衡 12 | Helm Charts:如何在生产环境中释放部署生产力? 守护神:业务的日志与监控 「关注公众号【云世】,免费获取全系列课程内容」 13 | 服务守护进程:如何在 Kubernetes 中运行 DaemonSet 守护进程? 14 | 日志采集:如何在 Kubernetes 中做日志收集与管理? 15 | Prometheus:Kubernetes 怎样实现自动化服务监控告警? 16 | 迎战流量峰值:Kubernetes 怎样控制业务的资源水位? 17 | 案例实战:教你快速搭建 Kubernetes 监控平台 安全无忧:集群的安全性与稳定性 18 | 权限分析:Kubernetes 集群权限管理那些事儿 19 | 资源限制:如何保障你的 Kubernetes 集群资源不会被打爆 20 | 资源优化:Kubernetes 中有 GC(垃圾回收)吗? 21 | 优先级调度:你必须掌握的 Pod 抢占式资源调度 22 | 安全机制:Kubernetes 如何保障集群安全? 23 | 最后的防线:怎样对 Kubernetes 集群进行灾备和恢复? 「关注公众号【云世】,免费获取全系列课程内容」 加餐:问题答疑和优秀留言展示 知其所以然:底层核心原理及可扩展性 24 | 调度引擎:Kubernetes 如何高效调度 Pod? 25 | 稳定基石:带你剖析容器运行时以及 CRI 原理 26 | 网络插件:Kubernetes 搞定网络原来可以如此简单? 27 | K8s CRD:如何根据需求自定义你的 API? 28 | 面向 K8s 编程:如何通过 Operator 扩展 Kubernetes API? 特别放送 「关注公众号【云世】,免费获取全系列课程内容」 29 | Kubernetes 中也有定时任务吗? 30 | Kubectl 命令行工具使用秘笈 结束语 结束语 | Cloud Native is Eating the World:时代在召唤云原生 「关注公众号【云世】,免费获取全系列课程内容」
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值