Kubernetes 安装部署:一步一步指南 (kubernetes)
简介
Kubernetes 是一个开源的容器编排系统,用于自动化容器化应用程序的部署、管理和扩展。它为容器提供了一个可移植、可扩展的平台,允许开发人员轻松地在任何云或本地环境中运行和管理容器化应用程序。本文将提供一个分步指南,指导您在 Linux 系统上安装和部署 Kubernetes 集群。系统要求
具有至少 2 个 CPU 内核和 2GB 内存的 Linux 系统。稳定的互联网连接。root 权限。安装 Docker
Kubernetes 依赖于 Docker 容器引擎。请确保在您的系统上安装了 Docker。Ubuntu/Debian```bashcurl -fsSL-o get-docker.shsudo sh get-docker.shsudo usermod -aG docker $USER```CentOS/Red Hat```bashsudo yum install -y yum-utils device-mapper-persistent-data lvm2sudo yum-config-manager --add-repoyum install -y docker-cesudo systemctl start dockersudo systemctl enable docker```安装 kubeadm
kubeadm 是 Kubernetes 集群安装程序工具。Ubuntu/Debian```bashsudo apt-get updatesudo apt-get install -y kubeadm```CentOS/Red Hat```bashsudo yum install -y kubeadm```初始化 Kubernetes 集群
现在,您可以使用 kubeadm 初始化 Kubernetes 集群。```bashkubeadm init --pod-network-cidr=10.244.0.0/16```这将创建一个默认命名空间、创建初始节点、配置 Pod网络和设置各种组件,例如 API 服务器、etcd、kubelet 和 kube-proxy。加入其他节点
要加入其他节点到集群中,您可以使用 kubeadm join 命令。```bashkubeadm join验证集群
要验证集群是否正常工作,您可以运行以下命令:```bashkubectl get nodeskubectl get pods --all-namespaces```如果命令成功运行,您应该看到集群中的节点和 Pod 列表。部署应用程序
现在,您可以开始在 Kubernetes 集群中部署应用程序。创建一个名为 `test-app.yaml` 的 YAML 清单文件,内容如下:```yamlapiVersion: apps/v1kind: Deploymentmetadata:name: test-appspec:replicas: 3selector:matchLabels:app: test-apptemplate:metadata:labels:app: test-appspec:containers:- name: test-appimage: nginx:latestports:- containerPort: 80```使用 kubectl 命令创建部署:```bashkubectl create -f test-app.yaml```要查看部署状态,可以运行:```bashkubectl get deployments```要访问部署的 Pod,可以运行:```bashkubectl get pods```您可以使用 kubectl port-forward 命令将 Pod 的端口转发到您的本地计算机:```bashkubectl port-forward pod-name 8080:80```现在,您可以通过在浏览器中访问 `localhost:8080` 来访问应用程序。故障排除
如果您在安装或部署 Kubernetes 时遇到问题,可以参考以下故障排除提示:检查系统要求是否符合。确保 Docker 正在运行。检查 kubeadm 是否已正确安装。验证 Kubernetes 集群已正确初始化。检查加入的节点是否已成功加入到集群中。查看 Kubernetes 日志以查找错误消息。结论
本指南逐步介绍了如何在 Linux 系统上安装和部署 Kubernetes 集群。通过遵循这些步骤,您可以轻松地设置和管理自己的 Kubernetes 环境,并开始部署容器化应用程序。基于Linux自己初步搭建Kubernetes(k8s)集群基础,详细教程
k8s官方网站:,可自行查看相关文档说明
k8s-master:Ubuntu--192.168.152.100
k8s-node01:Ubuntu--192.168.152.101
k8s-node02:Ubuntu--192.168.152.102
全部已安装docker,未安装可根据官方文档安装:1,禁止swap分区
K8s的要求,确保禁止掉swap分区,不禁止,初始化会报错。
在每个宿主机上执行:
2,确保时区和时间正确
时区设置
3,关闭防火墙和selinux
ubuntu 查看防火墙命令,ufw status可查看状态,ubuntu20.04默认全部关闭,无需设置。
4,主机名和hosts设置(可选)
非必须,但是为了直观方便管理,建议设置。
在宿主机分别设置主机名:k8s-master,k8s-node01,k8s-node02
hosts设置
1,更改docker默认驱动为systemd
为防止初始化出现一系列的错误,请检查docker和kubectl驱动是否一致,否则kubectl没法启动造成报错。版本不一样,docker有些为cgroupfs,而kubectl默认驱动为systemd,所以需要更改docker驱动。
可查看自己docker驱动命令:
更改docker驱动,编辑 /etc/docker/ (没有就新建一个),添加如下启动项参数即可:
重启docker
需要在每台机器上安装以下的软件包:
2,更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包
安装软件包以允许apt通过HTTPS使用存储库,已安装软件的可以忽略
3,下载公开签名秘钥、并添加k8s库
国外 :下载 Google Cloud 公开签名秘钥:
国内:可以用阿里源即可:
请注意,在命令中,使用的是Ubuntu 16.04 Xenial 版本, 是可用的最新 Kubernetes 存储库。所以而非20.04 的focal。
4,更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本
锁定版本,防止出现不兼容情况,例如,1.7.0 版本的 kubelet 可以完全兼容 1.8.0 版本的 API 服务器,反之则不可以。
只需要在master上操作即可。
1,初始化错误解决(没有报错的可以跳过这条)
错误提示1:
原因:kubectl没法启动,journalctl -xe查看启动错误信息。
解决方案:k8s建议systemd驱动,所以更改docker驱动即可,编辑 /etc/docker/ (没有就新建一个),添加如下启动项参数即可:
重启docker和kubectel
错误提示2:
原因:初始化生产的文件,重新初始化,需要删除即可
错误提示3:
解决方法:重置配置
2,初始化完成
无报错,最后出现以下,表示初始化完成,根据提示还需要操作。
根据用户是root或者普通用户操作,由于大多环境不会是root用户,我也是普通用户,所以选择普通用户操作命令:
如果是root用户,执行以下命令:
初始化完成,用最后的提示命令 kubeadm join.... 在node机器上加入集群即可。
3,主节点pod网络设置
主节点支持网络插件:这里安装Calico网络插件:Calico官网提供三种安装方式,1)低于50个节点,2)高于50个节点,3)etcd datastore(官方不建议此方法)。
这里选择第一种:
安装完成后, kubectl get node可查看节点状态,由NotReady变成Ready则正常,需要等几分钟完成。
1,node加入master节点
在所有node节点机器操作,统一已安装完成 kubelet、kubeadm 和 kubectl,用master初始化完成后最后提示命令加入,切记要用root用户。
加入成功后,提示如下:
再次查看kubelet服务已正常启动。
2,需注意的坑
1:加入主节点,需要 root 用户执行词条命令,才可以加入master主节点。
node在没有加入主节点master之前,kubelet服务是没法启动的,是正常情况,会报错如下:
原因是缺失文件,主节点master初始化 `kubeadm init`生成。
node节点是不需要初始化的,所以只需要用root用户`kubeadm join`加入master即可生成。
2:如果加入提示某些文件已存在,如:
原因是加入过主节点,即使没成功加入,文件也会创建,所以需要重置节点,重新加入即可,重置命令:
3,在master查看节点
加入完成后,在master节点 kubectl get node 可查看已加入的所有节点:
使用VirtualBox安装CentOS 7和Kubernetes
在《使用VirtualBox安装CentOS 7和Docker》中,我们已经详细地介绍了使用VirtualBox安装CentOS 7和Docker的过程。 现在我们在此基础上继续安装Kubernetes。 首先,我们新建“/etc/.d/”,使用aliyun的镜像仓配置yum源。 将以下内容保存到文件中: 之后,为新添加的yum源生成缓存: 其输出结果为: 首先,我们通过以下命令关闭swap分区: 然后,我们修改“/etc/fstab”文件,禁止swap被自动加载: 将其中swap的配置注释掉即可: 配置kubernetes的过程需要关闭防火墙: 同时我们将防火墙取消自启动: 首先,我们执行以下命令,禁用SELinux: 然后,我们修改配置文件“/etc/sysconfig/selinux”: 将“SELINUX”设置为“disabled”: 执行以下命令,查看SELinux状态: 其输出结果为: 说明已禁用SELinux。 此时,我们需要修改“/etc/docker/”文件: 将以下内容保存到文件中: 然后,我们重启Docker服务,使配置生效: 我们可以通过以下命令来查看当前生效的cgroup驱动: 其输出结果为: 在安装Kubernetes之前,我们先重启操作系统,确保之前所修改的配置生效。 首先,我们安装Kubernetes的必要工具: 这里我们需要记下所安装的Kubernetes的版本,例如: 说明我们所安装的kubernetes的版本为“1.23.3”。 然后,我们将kubelet服务设置为自启动: 输出结果为: 注意,这里我们只是将服务设置为自启动,并未启动服务。 现在服务是无法启动的,我们先要进行初始化。 初始化服务需要依赖一些镜像,在国内访问“”来拉取镜像通常是有问题的,因此这里我们先从阿里云将镜像拉取到本地。 如果拉取镜像过程发生“connection refused”导致的失败,我们重新执行命令来拉取即可。 拉取成功后的输出如下: 执行以下命令,使网桥在进行二层转发时使用iptables配置的三层规则: 执行结果如下: 现在我们需要对环境进行初始化,需要注意的是: 执行以下命令进行初始化,执行前需要检查参数,以符合自身环境的网络要求: 在初始化完成后,输出内容的最下方有如下的信息: 根据提示,因为我本地是直接使用的root用户,因此执行以下命令: 但是在操作系统重启后,这个设置就失效了,需要重新设置。 这里我们直接修改“/etc/profile”文件,增加环境变量。 然后在文件最后增加环境变量配置: 如果不是使用root命令安装,则需执行以下命令: 现在,我们来检查一下kubelet服务的状态: 其输出结果为: 此时Kubernetes的基础服务已经安装成功。 我们通过以下命令来查看POD状态: 输出结果如下: 说明虽然服务已经安装成功,但是master节点并未处于可用状态。 我们通过以下命令来查看POD的运行状态。 其输出结果如下: 我们发现名称“coredns-xxx”的两个POD的状态为“Pending”,未启动成功。 此时我们需要安装网络服务,我们选择使用calico来提供网络服务: 输出结果如下: 现在我们重新查看节点状态: 输出结果为: 此时节点已处于就绪状态。 我们再来检查POD状态: 输出结果为: 各POD的运行状态都正常,Kubernetes已安装完成。 在默认情况下,在Kubernetes中部署应用时,是不会调度到master节点的,在我们学习和体验Kubernetes时不是很方便。 此时我们可考虑通过去除污点(taints)的方法来使master节点参与负载,以使POD可以被调用到master节点中部署和运行。 首先,我们检查当前master节点是否参与了负载: 执行结果如下: 表示当前master节点尚未参与负载。 此时我们执行以下命令,以使其参与负载: 执行结果为: 现在我们再次检查参与负载的情况: 输出结果是一个空行,则此时已可以使POD被调度到master节点了。 为了更直观的使用Kubernetes,我们后续来安装Dashboard,以提供通过Web页面的访问。
高可用kubernetes集群搭建
架构说明
Kubernetes集群组件:
k8s集群高可用,一般是etcd,kube-apiserver,kube-controller-manager,kube-scheduler服务组件的高可用。
规划:
3个master节点,2个worker节点,使用keepalived+haproxy做高可用
一、前期环境准备
Kubernetes 1.8开始要求关闭系统的Swap,如果不关闭,默认配置下kubelet将无法启动。
方法一 通过kubelet的启动参数–fail-swap-on=false更改这个限制。
方法二 关闭系统的Swap, swapoff -a
修改/etc/fstab文件,注释掉SWAP的自动挂载,使用free -m确认swap已经关闭。
二、docker安装
安装docker-ce,所有节点都要安装
yum-utils 提供yum-config-manager工具,devicemapper存储需要device-mapper-persistent-data和lvm2
添加yum源仓库
官方仓库
安装docker
配置docker中国镜像加速器,修改cgroup driver为systemd,k8s建议使用systemd,配置后重启docker
三、安装haproxy,keepalived
安装haproxy和keepalived,实现kube-apiserver高可用
psmisc提供killall命令
配置haproxy
配置keepalived
注意:在另外两个节点,设置state为BACKUP,priority设置为110,100
启动所有节点的haproxy和keepalived
查看VIP
注意,使用ifconfig命令是看不到的,必须使用ip addr命令
这时候vip在130.252.10.235上,我们关闭235上的haproxy,验证vip是否会漂移到其他节点
四、kubeadm/kubelet/kubectl安装
master节点安装:kubeadm、kubelet、kubectl
node节点安装:kubeadm、kubelet
安装
五、使用kubeadm初始化cluster
step1 准备初始化配置文件
根据自己的环境修改配置.
step2 处理kubernetes依赖的镜像
master需要的镜像为
node节点需要的镜像为
查看需要的镜像版本
拉取镜像
六、初始化第一个master节点
注意:如果你禁用了swap分区,则不需要加--ignore-preflight-errors=Swap
配置kubectl
启用kubectl的自动补全命令
七、安装Pod网络flannel
八、将其他master节点添加到cluster
将node1证书文件复制到其他master节点node2,node3
分别在master1和master2 执行下面的命令
九、将node节点添加到cluster
十、检查集群运行 健康
在master节点查看节点状态
所有的节点都是NotReady,这是因为每个节点都需要启动若干组件,这些组件都是在pod中运行,需要从Google下载镜像
查看pod的状态
查看集群信息
查看etcd集群
查看集群是否 健康
查看集群的leader
注意 :因为是3个节点的ETCD集群,所以只能有一个宕机,如果同时又2个节点宕机,则会出现问题Unable to connect to the server: EOF
etd集群需要大多数节点(仲裁)才能就集群状态的更新达成一致,所以ETCD集群节点一般是奇数个,而且只有存活节点个数大于下线节 点个数才能正常运行,5个节点的ETCD集群,允许同时2个节点故障。
一般建议5个节点,超过五个虽然容错性更高,但是集群写入性就会差。
检查IPVS
若对本页面资源感兴趣,请点击下方或右方图片,注册登录后
搜索本页相关的【资源名】【软件名】【功能词】或有关的关键词,即可找到您想要的资源
如有其他疑问,请咨询右下角【在线客服】,谢谢支持!
相关文章
- 告别意外关机:使用电脑定时关机功能确保数据安全 (意外关机计划)
- 电脑定时关机:让你的设备为你省心省力 (电脑定时关机怎么设置)
- 让你的电脑为你工作:利用电脑定时关机功能实现自动化 (让你的电脑为你赚钱)
- 释放你的科技束缚:使用电脑定时关机功能控制屏幕时间 (释放你的科技英文)
- 夜晚休息,电脑也休息:设置电脑定时关机以改善睡眠质量 (夜晚休息时间是几点)
- 让电脑在正确的时间进入睡眠状态:利用电脑定时关机功能保护硬件 (怎么把电脑调到最佳状态)
- 远离夜间电力浪费:使用定时关机功能优化能源消耗
- 为忙碌的专业人士量身打造:使用电脑定时关机工具管理时间 (忙碌的工作为了什么)
- 释放帝国时代3:亚洲王朝的无限可能性,用秘籍创造属于你的帝国 (释放帝国时代的游戏)
- 征服帝国时代3:亚洲王朝,掌握秘籍,取得压倒性胜利 (征服帝国时代怎么玩)
发表评论
评论列表
- 这篇文章还没有收到评论,赶紧来抢沙发吧~