前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kubernetes初体验-基于K8S的集群部署

Kubernetes初体验-基于K8S的集群部署

作者头像
make a bug
发布2022-09-20 15:00:24
7300
发布2022-09-20 15:00:24
举报
文章被收录于专栏:我和bug只能活一个

说起Kubernetes,可能有些朋友会觉得有些陌生,但是如果说起docker,我想作为后台开发人员再熟悉不过了。那么,两者有啥区别呢,如何搭建一个K8S分布式集群呢,请带着这些疑问看下面的内容。

Kubernetes中的ubernete一般用8代替,下文中我会用K8S来简称。

#过早优化是万恶之源

我们为什么要用集群

答案很简单

就是为了保证系统

高并发场景下的

高可用

可横向扩展

可伸缩

容器技术的兴起源于PaaS 技术的普及

什么是pass?

pass一般在商业领域会和sass,iass放在一块讨论。

SaaS:Software-as-a-Service(软件即服务)

IaaS:Infrastructure-as-a-Service(基础设施即服务)

PaaS:Platform-as-a-Service(平台即服务)

如上图,这里不赘述具体区别,有兴趣可以搜索下相关内容。

1

Docker 具有里程碑式的意义

Docker 公司发布的 Docker 项目具有里程碑式的意义;Docker 项目通过“容器镜像”,解决了应用打包这个根本性难题。

容器本身没有价值,有价值的是“容器编排”。

也正因为如此,容器技术生态才爆发了一场关于“容器编排”的“战争”。而这次战争,最终以 Kubernetes 项目和 CNCF 社区的胜利而告终。

2

什么是容器技术

容器其实是一种沙盒技术。顾名思义,沙盒就是能够像一个集装箱一样,把你的应用“装”起来的技术。这样,应用与应用之间,就因为有了边界而不至于相互干扰;而被装进集装箱的应用,也可以被方便地搬来搬去,这不就是 PaaS 最理想的状态嘛,而容器技术和传统的虚拟机也有着很大的区别,如下图。

这幅图的左边,画出了虚拟机的工作原理。其中,名为 Hypervisor 的软件是虚拟机最主要的部分。它通过硬件虚拟化功能,模拟出了运行一个操作系统需要的各种硬件,比如 CPU、内存、I/O 设备等等。然后,它在这些虚拟的硬件上安装了一个新的操作系统,即 Guest OS。这样,用户的应用进程就可以运行在这个虚拟的机器中,它能看到的自然也只有 Guest OS 的文件和目录,以及这个机器里的虚拟设备。这就是为什么虚拟机也能起到将不同的应用进程相互隔离的作用。而这幅图的右边,则用一个名为 Docker Engine 的软件替换了 Hypervisor。这也是为什么,很多人会把 Docker 项目称为“轻量级”虚拟化技术的原因,实际上就是把虚拟机的概念套在了容器上。

3

k8s为何物

作为一名开发者,我们有时并不关心容器运行时的差异。因为,在整个“开发 - 测试 - 发布”的流程中,真正承载着容器信息进行传递的,是容器镜像,而不是容器运行时。只要能够将用户提交的 Docker 镜像以容器的方式运行起来,就能成为众多容器生态图上的一个承载点,从而将整个容器技术栈上的价值,沉淀在这个节点上。

这个逻辑,正是所有云计算提供商如此热衷于容器技术的重要原因:通过容器镜像,它们可以和潜在用户(即,开发者)直接关联起来。从一个开发者和单一的容器镜像,到无数开发者和庞大的容器集群,容器技术实现了从“容器”到“容器云”的飞跃,标志着它真正得到了市场和生态的认可。这样,容器就从一个开发者手里的小工具,一跃成为了云计算领域的绝对主角;而能够定义容器组织和管理规范的“容器编排”技术。

k8s的兴起,原因就是这个。简单来说,k8s就是用来管理容器集群的工具。比如我现在想建立一个mongo数据库服务,那么我直接用docker库中的镜像就可以快速的创建并运行一个mongo服务,那如果我建立一个容器集群呢并且分布式部署呢?k8s就是为此而生。

不得不说,谷歌在容器编排技术走在了世界最前列,K8S借鉴了谷歌在十多年前研究的Borg的设计理念,比如Pod、Service、Labels和单Pod单IP等。Kubernetes的整体架构跟Borg非常像,如下图所示

这幅图对于我们理解马上搭建的容器集群有很大的帮助,希望大家可以对着教程多看几遍。

4

K8S创建集群-创建一个master节点

如上图所示,master节点的作用相当于一个控制面板,运行在上面的kubectl就是用来管理各个nodes节点的命令终端。

1.在创建mster节点前我们需要在所有的服务器上安装k8s中的一些工具kubeadm(创建管理集群),kubelet(管理单节点的pods),kubectl(管理多个nodes)。这个安装很简单,我从网上找了一张图供大家参考。

创建master需要选择一台服务器当master节点,然后切到服务器执行下面的操作。

2.先禁用缓存命令行输入一下语句

swapoff -a(禁用虚拟内存)

3.创建控制平面(也叫创建master)

kubeadm init --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16

注意:有的时候需要重启节点,一定要把配置文件,也就是 HOME/.kube/这个文件夹删除掉之后执行kubeadm reset。我在这里遇到一个很坑的问题,就是重启读到的配置文件还是之前的,因为我账户默认的HOME不是root,而我执行init是用的root账号,所以删除的应该是/root/.kube/

4

K8S创建集群 -增加pods节点

1.在创建完master后就已经有了一些基础pods节点,查看pods的状态

a.发现coredns都是pending,应该是网络的问题:缺少网络插件,部署flannel网络插件,执行如下语句

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

我试了一下不行,然后决定手动安装。参考:https://www.cxyzjd.com/article/baidu_38803985/105966464

b.再次查看状态:sudo kubectl get pods -n kube-system -o wide

2.创建pods

pods就是需要管理的容器,我们选择一台需要部署容器服务的服务器。

a.在 kubeadm 初始话集群成功后会返回 join 命令, 里面有 token,discovery-token-ca-cert-hash等参数, 但ta们是有过期时间的. token 的过期时间是24小时, certificate-key 过期时间是2小时.所以要先查看token信息kubeadm token list,然后将对应的主机join进去,我们可以下面的语句生成join的语句

kubeadm token create --print-join-command

然后切到master服务器,然后将这个语句粘贴进去,就实现了集群之间的关联。

5

K8S创建集群-创建mongodb集群

这里选用副本集模式(Replica Set):该模式取代了 Master-Slaver 模式,是一种互为主从的关系。Replica Set 将数据复制多份保存,不同服务器保存同一份数据,在出现故障时自动切换,实现故障转移,在实际生产中非常实用。因为太长,我找了一片文章分享给大家:https://www.hangge.com/blog/cache/detail_3159.html

下面说几点我遇到的问题

常见错误:Pod 一直处于 ContainerCreating 或 Waiting 状态,可以用kubectl describe pods命令查看一下哪里出了问题。大概率是因为pv配置有问题或者nfs服务不正常(要每个nodes节点上都有nfs服务才可以)。

这次的分享就到这里啦,其实关于容器化技术还有更多深层次的内容,比如它的实现原理,如何隔离。之后会慢慢深入分析,有兴趣的点点关注吧!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI懒人星球 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档