使用Kubespray部署Kubernetes集群

简介: Kubespray是Google开源的一个部署生产级别的Kubernetes服务器集群的开源项目,它整合了Ansible作为部署的工具。项目地址:github.com/kubernetes-… 部署历程 目前为止,对于Kubernetes集群的部署,我只谈的上是一个入门者,涉及到了众多的运维知识,对于一个开发来说,确实挺难的。

Kubespray是Google开源的一个部署生产级别的Kubernetes服务器集群的开源项目,它整合了Ansible作为部署的工具。项目地址:github.com/kubernetes-…

部署历程

目前为止,对于Kubernetes集群的部署,我只谈的上是一个入门者,涉及到了众多的运维知识,对于一个开发来说,确实挺难的。万事开头难,好事多磨,经过一个多星期的反复尝试,终于搭建好了。对比市面上的部署方式,主流的有三种方式。一是完全手动部署,非常的繁琐,容易部署。二是采用kubeAdmin开源项目进行部署,这个也是谷歌官方开源的一个项目。三是 ,采用kubeSpray进行部署。我的理念是有好的工具当然是用好工具,所以手动部署是不可能的,完全排除,所以Kubeadmin和KubeSpray。而我对Ansibe这个运维组件兴趣非常的大,所以我最终选择了KubeSpray进行了部署。

部署的工程是非常艰难的,在我决定搞Kubernetes之时,为了学习不难么枯燥和孤独,我专门组建了一个群,找了一些朋友一起来学习和交流,采用的方式是大家一起学习,一起写文档,一起交流,另外有主机的出主机。所以,一开始的主机是几个朋友自己的主机,不在一个局域网内,计算机操作系统也不太一样,这为后面的部署带来了一个大坑。另外由于国内的屏蔽了谷歌的网络,导致谷歌的相关镜像下载不下来,这也是一个坑。

坑点1,不在一个局域网不能部署Kubernetes?我专门打电话问了阿里云,客户说不可以,是不是真的不可以,我是不确定的。另外集群的型号不同和操作系统不同也会导致失败。

坑点2,长城屏蔽了谷歌的镜像,所以我刚开始是根据谷歌的镜像在阿里云镜像仓库一顿搜索,导致Kubernetes各个版本组件不兼容,出现了问题。

现在我也这篇文章来详细讲解我的部署过程,供其他人参考,如果有其他人想加入我们的Kubernetes兴趣群,加我微信miles02和我联系。

主机相关

主机需要在同一局域网内?所以我们重新租了三台机器,进行了操作。现在列举主机相关的信息如下:

主机 系统版本 配置 ip
Ansible CentOS 7.2 1核1G 172.31.84.154
Mater、Node CentOS 7.2 2核2G 172.31.84.155
Node CentOS 7.2 2核2G 172.31.84.156

Ansible那台主机使用KubeSpray进行部署,这台机器不做Kubernetes相关集群的部署。另外2台机器,一台既作为Master,又作为Node,另外一台是一个Node。

本次部署,使用的KubeSpray版本为v2.1.2。

Master、Node节点的操作

因为本次使用KubeSpray操作部署,所以所有的主机都需要关闭防火墙等相关的操作。

所以的主机都需要关闭selinux,执行的命令如下:

setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

防火墙和网络设置,所有的主机都执行以下命令:

systemctl stop firewalld
modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
sysctl -w net.ipv4.ip_forward=1

这样与Kubernetes集群相关的集群设置就完毕了。

Ansibe主机操作

Ansibe主机也需要关闭selinux和关闭防火墙以及网络设置,同上面。

在Ansible主机上设置免密码操作其它主机

首先生成ssh公钥和私钥。

ssh-keygen

按三次回车。

建立ssh通道,

ssh-copy-id root@172.31.84.155 将秘钥分发给master主机。
ssh-copy-id root@172.31.84.156

安装Ansible

安装ansible和jinja2,安装命令如下。


sudo yum install epel-release
sudo yum install ansible

easy_install pip
pip2 install jinja2 --upgrade

如果执行 pip2 install jinja2–upgrade 提示升级,则升级,再执行一次命令。

安装python36

sudo yum install python36 -y 

在Ansible集群上安装KubeSpray

在ansible机器上下载KubeSpray代码,并解压,执行如下的命令:

wget https://github.com/kubernetes-incubator/kubespray/archive/v2.1.2.tar.gz
tar -zxvf v2.1.2.tar.gz
mv kubespray-2.1.2 kuberspray

安装KubeSpray所需的包

执行如下命令:

cd kubespray
pip install r requirements.txt

定义集群

执行以下的命令。

IP=(
172.31.84.155
172.31.84.156
)

CONFIG_FILE=./kubespray/inventory/inventory.cfg python36 ./kubespray/contrib/inventory_builder/inventory.py ${IP[*]

vim ~./kubespray/inventory/inventory.cfg

[all]
node1 ansible_host=172.31.84.156 ip=172.31.84.156
node2 ansible_host=172.31.84.155 ip=172.31.84.155

[kube-master]
node1

[kube-node]
node1
node2

[etcd]
node1

[k8s-cluster:children]
kube-node
kube-master

[calico-rr]

[vault]
node1

替换镜像

在kuberspay源码源代码中搜索包含 gcr.io/google_containers 和 quay.io 镜像的文件,并替换为我们之前已经上传到阿里云的进行,替换脚步如下:

grc_image_files=(
./kubespray/extra_playbooks/roles/dnsmasq/templates/dnsmasq-autoscaler.yml
./kubespray/extra_playbooks/roles/download/defaults/main.yml
./kubespray/extra_playbooks/roles/kubernetes-apps/ansible/defaults/main.yml
./kubespray/roles/download/defaults/main.yml
./kubespray/roles/dnsmasq/templates/dnsmasq-autoscaler.yml
./kubespray/roles/kubernetes-apps/ansible/defaults/main.yml
)

for file in ${grc_image_files[@]} ; do
 sed -i 's/gcr.io\/google_containers/registry.cn-hangzhou.aliyuncs.com\/szss_k8s/g' $file
done

quay_image_files=(
./kubespray/extra_playbooks/roles/download/defaults/main.yml
./kubespray/roles/download/defaults/main.yml
)

for file in ${quay_image_files[@]} ; do
 sed -i 's/quay.io\/coreos\//registry.cn-hangzhou.aliyuncs.com\/szss_quay_io\/coreos-/g' $file
 sed -i 's/quay.io\/calico\//registry.cn-hangzhou.aliyuncs.com\/szss_quay_io\/calico-/g' $file
 sed -i 's/quay.io\/l23network\//registry.cn-hangzhou.aliyuncs.com\/szss_quay_io\/l23network-/g' $file
done

使用ansible playbook部署Kubernetes集群

以上全部完成,执行安装操作:

cd kubespray
ansible-playbook -i inventory/inventory.cfg cluster.yml -b -v --private-key=~/.ssh/id_rsa

大约过了10分钟,如果顺利的话,集群会成功搭建。

验证几点是否成功

登录Kubernete集群的Mater集群,执行如下命令:

kubectl get no

控制台打印出了正确的Kubernetes节点信息,则安装成功。

增加节点

cd kubespray
ansible-playbook -i inventory/inventory.cfg cluster.yml -b -v --private-key=~/.ssh/id_rsa --limit node3

遇到问题卸载

ansible执行卸载操作:


ansible-playbook -i inventory/mycluster/hosts.ini reset.yml

安装失败清理Kubernetes机器


rm -rf /etc/kubernetes/
rm -rf /var/lib/kubelet
rm -rf /var/lib/etcd
rm -rf /usr/local/bin/kubectl
rm -rf /etc/systemd/system/calico-node.service
rm -rf /etc/systemd/system/kubelet.service
systemctl stop etcd.service
systemctl disable etcd.service
systemctl stop calico-node.service
systemctl disable calico-node.service
docker stop $(docker ps -q)
docker rm $(docker ps -a -q)
service docker restart

本文转自掘金-使用Kubespray部署Kubernetes集群

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2天前
|
资源调度 Kubernetes 监控
Kubernetes 集群性能优化实践
【5月更文挑战第17天】在容器化和微服务架构日益普及的当下,Kubernetes 已成为众多企业的首选容器编排工具。然而,随着集群规模的增长和业务复杂度的提升,性能优化成为确保系统稳定性与高效运行的关键。本文将深入探讨 Kubernetes 集群性能优化的策略与实践,覆盖从节点资源配置到网络通信优化,再到高效的资源调度机制,旨在为运维人员提供系统的优化路径和具体的操作建议。
|
3天前
|
Kubernetes 前端开发 容器
k8s部署模板
k8s部署模板
|
3天前
|
存储 Java Serverless
ACK One Argo 工作流集群:玩转容器对象存储
ACK One Argo 工作流集群:玩转容器对象存储
ACK One Argo 工作流集群:玩转容器对象存储
|
4天前
|
Kubernetes Ubuntu Docker
初始化k8s多结点集群
在Ubuntu22.04.3 LTS上设置k8s多节点集群,采用Docker v24.0.6、kubeadm v1.28和cir-dockerd v0.3.4。首先安装docker和cri-dockerd,更新k8s三件套至v1.28。然后,参照官方文档进行`kubeadm init`初始化集群,配置包括自定义镜像仓库、控制面端点等。成功初始化后,显示了相关证书和配置信息。最后,提供了一些额外的kubectl命令以管理节点。
13 1
|
4天前
|
存储 运维 Kubernetes
Kubernetes 集群的持续性能优化策略
【5月更文挑战第14天】 在动态且不断扩展的云计算环境中,保持 Kubernetes 集群的高性能运行是一个挑战。本文将探讨一系列实用的性能优化措施,旨在帮助运维专家确保其容器化应用能在资源受限的情况下仍保持高效与稳定。通过分析 Kubernetes 的资源调度机制、存储和网络配置,我们提出了一套综合的性能调优框架,并结合实际案例,展示如何实施这些策略以提升集群的整体性能。
|
4天前
|
运维 Prometheus 监控
Kubernetes 集群监控与性能优化实践
【5月更文挑战第14天】 在微服务架构日益普及的当下,Kubernetes 已成为容器编排的事实标准。然而,随着集群规模的扩大和业务复杂度的增加,监控系统的性能及稳定性变得至关重要。本文将深入探讨 Kubernetes 集群监控的重要性,介绍常用监控工具,并分享一系列针对集群性能优化的实践策略,帮助运维工程师确保服务的高可用性和优越性能。
|
4天前
|
Kubernetes 安全 API
Kubernetes学习-集群搭建篇(三) Node配置完善和API概述
Kubernetes学习-集群搭建篇(三) Node配置完善和API概述
Kubernetes学习-集群搭建篇(三) Node配置完善和API概述
|
Kubernetes 开发者 微服务
简化Kubernetes应用部署工具-Helm之Hook
微服务和容器化给复杂应用部署与管理带来了极大的挑战。Helm是目前Kubernetes服务编排领域的唯一开源子项目,做为Kubernetes应用的一个包管理工具,可理解为Kubernetes的apt-get / yum,由Deis 公司发起,该公司已经被微软收购。
1568 0
|
Kubernetes 开发者 微服务
简化Kubernetes应用部署工具-Helm之Hook
本文讲的是简化Kubernetes应用部署工具-Helm之Hook【编者的话】微服务和容器化给复杂应用部署与管理带来了极大的挑战。Helm是目前Kubernetes服务编排领域的唯一开源子项目,做为Kubernetes应用的一个包管理工具,可理解为Kubernetes的apt-get / yum,由Deis 公司发起,该公司已经被微软收购。
2523 0
|
4天前
|
Kubernetes 应用服务中间件 Docker
Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件
Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件