K8S 部署方式有很多,有的方式不太友好,需要注意很多关键点,有的方式对小白比较友好,部署简单方便且高效
上一篇我们讲述了使用Kubectl管理k8s集群,那么接下来,我们将使用kubeadm来启动k8s集群。
kubectl 是用来与 Kubernetes 集群通讯的命令行工具。通过 Kubectl 可以在 Kubernetes 集群上完成如下操作:
本篇部署教程将讲述k8s集群的节点(master和工作节点)部署,请先按照上一篇教程完成节点的准备。本篇教程中的操作全部使用脚本完成,并且对于某些情况(比如镜像拉取问题)还提供了多种解决方案。不过基于部署环境和k8s的复杂性,我们需要对k8s集群部署过程中的一些步骤都有所了解,尤其是“kubeadm init”命令。
上一篇博客记录了一下在 CentOS 下搭建 k8s 环境的方式,主要是使用的 shell 脚本执行安装部署命令。但是执行脚本终究只能人工执行,而且无法大批量安装,而本篇博客就使用批量执行工具 ansible 来自动化安装 k8s 环境。
Kubeadm是一个K8s部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。
在Docker容器技术被炒得热火朝天之时,大家发现,如果想要将Docker应用于具体的业务实现,是存在困难的——编排、管理和调度等各个方面,都不容易。于是,人们迫切需要一套管理系统,对Docker及容器进行更高级更灵活的管理。就在这个时候,K8S出现了。K8S,就是基于容器的集群管理平台,它的全称,是kubernetes。
如果想要了解 K8s 的一些特性,并且将其应运的很好,那就需要动手部署一个 K8s 集群。下面讲解下在腾讯云上 K8s 集群部署流程。
在上一个小系列文章《ASP.NET Core on K8S学习初探》中,通过在Windows上通过Docker for Windows搭建了一个单节点的K8S环境,并初步尝试将ASP.NET Core WebAPI项目部署到了K8S,把玩了一下快速部署和实例伸缩。这个系列开始,会继续学习K8S以及在Linux上搭建集群来深入把玩。本篇会回顾一下K8S的基本概念以及架构组成,然后会通过Kubeadm快速地搭建一个K8S集群供后续学习把玩之用。
在三台机器上均安装docker、kubeadm、kubelet,在master节点安装kubectl
“K8s在容器编排领域已经形成统治地位,不管是开发、运维和测试,掌握 kubernetes 都变得非常有必要。” —— 相信大家应该在各类技术论坛与博客中早已看见过如上的一段话。的确在敏捷开发占主导模式的现今,无论是项目任何阶段都随处可见K8s的身影,基础扩展要求、故障转移、部署模式等,以上这些基于K8s的特性与强大功能,都可以随时随地实现与落地。
最新版高可用安装:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/
描述: 本小节将主要为各位看友演示,V1.23.x版本的Kubernetes高可用集群版本升级实践,在做此操作前作者本想直通过v1.23.7升级到v1.26.x的,但是实践的过程中使用kubeadm upgrade plan命令后只建议升级到V1.23.17版本,由于此集群是用于开发测试的环境,想着只要稳定即可(不想折腾了),遂升级到V1.23.17希望能多用两年吧(PS: k8s 发展太快了短短几年就从v1.16搞得现在的v1.27),不过大多数生产环境中可能还是在v1.19~v1.23之间,因为这期间云原生比较火,一些传统企业也不断的引入了K8S到内部,为开发测试赋能,咳咳,话说得有点多了,回归正题。
Production-Grade Container Orchestration Automated container deployment, scaling, and management
主要是安装K8S中的三个组件:kubelet kubeadm kubectl,并指定版本,避免下载最新版本导致不兼容。
容器化部署k8s集群需要拉取官方镜像站k8s.gcr.io上的基础镜像,但由于国内网络无法直接拉取官方镜像,所以对于之前通过离线镜像部署集群的同学们来说集群升级很麻烦,需准备离线镜像包导入后再升级,这样容易造成升级复杂化和升级出错。
最近在学习kubernetes(之后都称为k8s),在跟着kubernetes交互式文档学习玩基本概念等知识后,想着自己也搭建一个集群,加深一下对其的理解。
顾名思义该集群中只有一个 master 节点,在这样的集群规划中,如果 master 节点出了任何问题,它所管理的各个 node 节点都会受到影响,缺点是很明显的。
目前为止,笔者已经写了 5 篇关于 k8s 的文章,这一篇笔者将介绍 CKAD 认证官方课程中,如何部署 k8s 节点。
kubernetes 从一发布开始其学习门槛就比较高,首先就是部署难,用户要想学习 kubernetes 必须要过部署这一关,社区也推出了多个部署工具帮助简化集群的部署,社区中推出的部署工具主要目标有两大类,部署测试环境与生产环境,本节主要讲述测试环境的部署,目前社区已经有多套部署方案了:
HAProxy反代了K8S Master服务器,提供了K8S Master API的高可用和负载均衡能力。
(3) 生成Kube Config文件,kubelet需要用这个文件与Master通信。
1.Cluster 集群 计算、存储和网络资源的集合,Kubernetes利用这些资源运行各种基于容器的应用。
搭建k8s开发环境有三种,一种是通过docker desktop + Minikube 来直接在你的电脑上搭建,这种搭建方式存在的问题比较多,很多功能不支持,不建议使用。另外一种方式是通过Docker Desktop安装k8s,这种k8s是单机版的,master 和node 是同一个节点也就是本机,这种方式安装的k8s基本上能满足我们的学习需求,初期学习阶段可以使用这种安装方式。还有就是通过前文介绍 vagrant 制作box 然后创建集群安装,这种安装方式是最完整也是最麻烦的。现在先介绍第二种安装方式,第二种方式是把k8s 镜像拉取下来并运行容器,但因为国内网络的问题,镜像依赖拉不下来,我们可以上github 拉阿里云的k8s-for-docker-desktop 到本地安装。
部署一个应用? 程序员:调用CLI告诉master,我们现在要部署一个tomcat应用
随着vivo业务迁移到K8s的增长,我们需要将K8s部署到多个数据中心。如何高效、可靠的在数据中心管理多个大规模的K8s集群是我们面临的关键挑战。kubernetes的节点需要对OS、Docker、etcd、K8s、CNI和网络插件的安装和配置,维护这些依赖关系繁琐又容易出错。
K8S 1.10.1版本部署
之前几篇介绍了Docker是什么以及怎么使用,但Docker只是容器管理工具,如果想要在Docker上部署大型应用,首先就是要解决网络的问题,还有一系列复杂的问题,包括集群管理,负载均衡等。此时就需要容器编排部署工具来解决这些问题。
另外写了一个k8s升级脚本,只要是用波哥的k8s一键部署脚本部署的集群,您可以升级到任意版本啦!如是最好,这样我就不用每个版本都写一个部署脚本了。
浏览器访问 https://labs.play-with-k8s.com/ 并登陆(可用dockerhub账号直接登录)
准备好几台机器,最好准备至少2台机器 我这里准备了3台机器,一台做master,2台做node 1.机器基本设置 1.1 设置主机名
首先我在这里说明一下我为什么学习K8S,现在的大型联网公司基本都镜像的方式进行一个管理(docker教程),但是当镜多的时候就不方便管理和维护所以就产生了Kubernetes这个组件。
将生成好的etcd.pem和etcd-key.pem以及ca.pem三个文件拷贝到目标主机的/etc/etcd/ssl目录下。
LVS 、HAProxy 被规划为基础层,主要提供了一个高可用的7层负载均衡器。 由LVS keepalived 提供一个高可用的VIP(虚拟IP)。 这个VIP DR模式转发到后端的HAProxy服务器。 HAProxy反代了K8S Master服务器,提供了K8S Master API的高可用和负载均衡能力。
在部署 Kubernetes 集群时关闭防火墙,通常是为了避免出现网络问题导致的部署失败或集群节点之间无法通信的问题。
节点名称如果都是lcoal,会造成后续加入 kubeadm join 时,pods pending,名称名称相同
在上一章中,我们已经学会了使用 kubeadm 创建集群和加入新的节点,在本章中,将按照 CKAD 课程的方法重新部署一遍,实际上官方教程的内容不多,笔者写了两篇类似的部署方式,如果已经部署了 kubernetes 集群,则本章的内容可跳过。
安装花了2天时间,总结了各种坑,就是为了让大家在学习k8s的时候不在从入门到放弃。
kubelet会根据/etc/kubernetes/manifests目录中的yaml文件拉起etcd的容器:
TIPS:需要在所有集群机器上执行的命令,可以用XSHELL的发送命令到所有会话,提高部署效率
k8s普通搭建出来只是单master节点,如果该节点挂掉,则整个集群都无法调度,K8s高可用集群是用多个master节点加负载均衡节点组成,外层再接高可用分布式存储集群例如ceph集群,实现计算能力+存储能力的高可用,同时,etcd也可以独立出来用外部的etcd集群。因为存手工部署k8s高可用集群比较麻烦,所以使用kind来部署。
前面我写了关于k8s环境部署的几篇文章,k8s部署还是比较麻烦的,所以是有必要考虑一键部署的方案,这里借助ansible playbook来实现k8s环境的一键部署,实现快速部署的目的。关于k8s传统部署详细过程可以参考以下文章:
Kubernetes 最初源于谷歌内部的 Borg,提供了面向应用的容器集群部署和管理系统。Kubernetes 的目标旨在消除编排物理 / 虚拟计算,网络和存储基础设施的负担,并使应用程序运营商和开发人员完全将重点放在以容器为中心的原语上进行自助运营。Kubernetes 也提供稳定、兼容的基础(平台),用于构建定制化的 workflows 和更高级的自动化任务。 Kubernetes 具备完善的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建负载均衡器、故障发现和自我修复能力、服务滚动升级和在线扩容、可扩展的资源自动调度机制、多粒度的资源配额管理能力。 Kubernetes 还提供完善的管理工具,涵盖开发、部署测试、运维监控等各个环节。
Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用。不能用于生产环境。
准备好几台机器,最好准备至少2台机器 这里准备了3台机器,一台做master,2台做node 1.机器基本设置 1.1 设置主机名
目前创建K8S集群的安装程序最受欢迎的有Kops,Kubespray,kubeadm,rancher,以及个人提供的脚本集等。 Kops和Kubespary在国外用的比较多,没有处理中国的网络问题,没法使用。 kubeadm是Kubernetes官方提供的k8s部署工具,不过不支持HA,且支持的docker版本、K8S版本也有限,因此无法作为生产级安装程序。 Rancher2016年的新起之秀,可以做到极简快速部署管理Docker,并支持多种编排方式:Cattle、Kubernetes、Mesos、Swa
kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具,这个工具 能通过两条指令完成一个 kubernetes 集群的部署:
领取专属 10元无门槛券
手把手带您无忧上云