k8s的部署

一、Kubernetes(K8S)简介

1、Kubernetes (K8S) 是什么

它是一个为 容器化应用提供集群部署和管理的开源工具,由 Google 开发。Kubernetes 这个名字源于希腊语,意为“舵手”或“飞行员”。k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。 Google 在 2014年开源了 Kubernetes 项目

主要特性:

高可用【不容易整体崩溃】,不宕机,自动灾难恢复灰度更新,不影响业务正常运转一键回滚到历史版本方便的伸缩扩展(应用伸缩,机器加减)、提供负载均衡【将压力平均分配给集群下所有服务器,这就是负载均衡----> 大家有福同享有难同当】有一个完善的生态【插件齐全 】

2、什么时候需要 Kubernetes

当你的应用只是跑在一台机器,直接一个 docker 就够了,方便轻松;

当你的应用需要跑在 3,4 台机器上,你依旧可以每台机器单独配置运行环境 + 负载均衡器;

当你应用访问数不断增加,机器逐渐增加到十几台、上百台、上千台时,每次加机器、软件更新、版本回滚,都会变得非常麻烦、痛不欲生,再也不能好好的摸鱼了,人生浪费在那些没技术含量的重复性工作上。

这时候,Kubernetes 就可以一展身手了,让你轻松管理百万千万台机器的集群。“谈笑间,樯橹灰飞烟灭”,享受着一手掌控所有,年薪百万指日可待。Kubernetes 可以为你提供集中式的管理集群机器和应用,加机器、版本升级、版本回滚,那都是一个

命令就搞定的事,不停机的灰度更新,确保高可用、高性能、高扩展。

3、 K8s 功能

(1)自动装箱

基于容器对应用运行环境的资源配置要求,自动部署应用容器

(2)自我修复(自愈能力)

当容器失败时,会对容器进行重启 ,当所部署的 Node 节点有问题时,会对容器进行重新部署和重新调

度 ,当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务

(3)水平扩展

通过简单的命令、用户 UI 界面或基于 CPU 等资源使用情况,对应用容器进行规模扩大或规模剪裁

(4)服务发现

用户不需使用额外的服务发现机制,就能够基于Kubernetes 自身能力实现服务发现和负载均衡

(5)滚动更新

可以根据应用的变化,对应用容器运行的应用,进行一次性或批量式更新

(6)版本回退

可以根据应用部署情况,对应用容器运行的应用,进行历史版本即时回退

(7)密钥和配置管理

在不需要重新构建镜像的情况下,可以部署和更新密钥和应用配置,类似热部署。

(8)存储编排

自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要 存储系统可以来自于本地目

录、网络存储(NFS、Gluster、Ceph 等)、公共云存储服务

(9)批处理

提供一次性任务,定时任务;满足批量数据处理和分析的场景

4、Kubernetes 集群架构

master node 【主节点】

Master Node 是k8s 集群控制节点,对集群进行调度管理,接受集群外用户对集群操作请求;-----------

不负责运行程序,只是负责调度控制

Master Node 包含组件:

----- API Server:各组件通过 api server 获取、更新集群的状态,只有 api server 能直接访问 etcd。

----- ClusterState Store(ETCD 数据库):Etcd用于保存集群所有的网络配置和对象的状态信息

----- Scheduler: 调度器,负责计算 Pod 应该调度到哪个 Worker 上

----- Controller MangerServer: 控制器管理器,负责运行各种各样的控制器,通常一种资源类型会对

应至少一个控制器,比如 Deployment 控制器;

worker node 【工作节点】

工作节点,可以是虚拟机或物理计算机,任务都在这里跑【部署的程序都在这上面】,机器性能需要好

点;通常都有很多个,可以不断加机器扩大集群;每个工作节点由主节点管理--------------------工作节点才

是真正干活的,我们部署的程序都在这个上面

Worker Node 包含组件:

----- kubelet:注册 node,管理节点上运行的 Pod

----- kube proxy: 负责维护节点上的网络规则,以转发流量

----- ContainerRuntime: 提供容器运行环境,是负责运行容器的软件

重要概念 Pod

Pod翻译为豆荚,K8S 调度、管理的最小单位,一个 Pod 可以包含一个或多个容器,每个 Pod 有自己

的虚拟IP。一个工作节点可以有多个 pod,主节点会考量负载自动调度 pod 到哪个节点运行。

二、安装 Kubernetes 集群

1、安装方式介绍

(1)、裸机搭建

裸机搭建一般有两种方式“kubeadm 方式”和”二进制方式“,Kubeadm 是一个 K8s 部署工具,提供

kubeadm init 和 kubeadm join,用于快速部署 Kubernetes 集群。二进制方式需要手工将所有的组件

安装,非常的复杂,所以一般优选kubeadm方式----此处选择kubeadm

第一步:环境准备【所有节点通用:master和worker都要进行】
主机名主机ip说明
k8s-master192.168.174.140master节点
k8s-node192.168.174.141node节点

<1>、【所有节点】设置主机名

#分别设置主机名
hostnamectl set-hostname k8s-1 --(主机名)
#分别修改host文件
vi /etc/hosts
-------
里面设置各个"节点的id 对应的hostname主机名"

==更改完节点后重启虚拟机==

<2>、【所有节点】关闭干扰服务

需要关闭所有节点的防火墙,selinux,dnsmasq,swap,NetworkManager

#关闭防火墙,并取消开机启动
systemctl disable --now firewalld
#关闭dnsmasq,并取消开机启动
systemctl disable --now dnsmasq
#关闭NetworkManager,并取消开机启动 --- 注意,如果是centos8就不用关闭了,此处用centos7,需要关闭
systemctl disable --now NetworkManager
#关闭selinux
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
#临时停止关闭swap
swapoff -a && sysctl -w vm.swappiness=0
#永久关闭,为了以后重启都不会开启了
vi /etc/fstab
注释掉/dev/mapper/centos-swap swap swap defaults 0 0
或者
UUID=bdb8b148-c906-4108-bd85-0391f977feef swap                    swap    defaults        0 0

<3>、【所有节点】同步时钟

如果每个节点时间不同步相互之间无法连接

#安装软件ntpdate
yum -y install ntpdate
#同步时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 
echo 'Asiz/Shanghai' >/etc/timezone
#设置时间服务器【此处用aliyun】
ntpdate time2.aliyun.com
#设置自动同步时间
crontab -e #开启任务设置,将下面的内容设置进去
--------下面是设置的内容【和vi操作一样】-------
0 */5 * * * ntpdate time2.aliyun.com #每5分钟同步一次时间,然后wq保存,可以通过crontab-l查看已配置的定时任务

<4>、【所有节点】将桥接的 IPv4 流量传递到 iptables 链

桥接的 IPv4 流量传递到 iptables 链在 Kubernetes 中的作用主要包括以下方面:

  1. 网络策略实现: Kubernetes 中的网络策略允许你定义 Pod 之间和 Pod 与外部通信的规则。通过将桥接的 IPv4 流量传递到 iptables 链,可以在 iptables 规则中定义网络策略,例如允许或拒绝特定 Pod 之间的通信、限制源/目标 IP、端口或协议等。

  2. 服务代理和负载均衡: iptables 在 Kubernetes 中用于服务代理和负载均衡。Kubernetes Service 抽象背后是 iptables 规则,它们使得从集群内部访问服务更为便捷,同时提供负载均衡功能。

  3. 流量管理和路由: 通过 iptables 可以对进出 Pod 的流量进行管理和路由。这包括在节点之间路由流量、NAT 转发、SNAT、DNAT 等操作,确保流量按照预期的方式在集群内外传输。

  4. 网络隔离和安全性: iptables 允许在 Kubernetes 中实现网络隔离和安全策略。通过定义适当的规则,可以限制 Pod 之间的通信,增强安全性并确保网络的完整性。

在 Kubernetes 中,CNI 插件负责配置网络和实现网络策略。这些插件可以使用 iptables 或其他技术来管理容器间通信。通过将桥接的 IPv4 流量传递到 iptables 链,Kubernetes 可以利用 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

< 5>、所有节点安装 Docker/kubeadm/kubelet

注意docker版本和安装k8s有对应关系,此处用的docker-ce-18.06.1

在GitHub可以查看所有Kubernetets版本信息:
https://github.com/kubernetes/kubernetes/releases

Docker安裝

yum install -y wget
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.1.ce-3.el7
systemctl enable docker
systemctl start docker
docker --version

给docker添加阿里云源,这样下载会快

#写入镜像加速
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://5n5qtc03.mirror.aliyuncs.com"]
}
EOF
#重启docker守护进程
systemctl daemon-reload
#重启docker服务
systemctl restart docker

添加 yum 源,用于安装kubernetes

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

安装 kubeadm,kubelet 和 kubectl

yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0 #下载kubeadm,kubelet和 kubectl,版本1.18.0
systemctl enable kubelet #开机自动启动kubelet
第二步:Master节点安装

<1>、kubeadm初始化master节点

kubeadm init \
--apiserver-advertise-address=【master节点ip】 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.18.0【版本和上面安装kubeadm,kubelet,kubectl一致】 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
​
示例:
​
kubeadm init \
--apiserver-advertise-address=192.168.174.140 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.18.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16

注意:kubeadm 初始化完毕后,最后生成一句“kubeadm join” 一定要保存好这个内容,因为这是用

于向k8s中加入节点的命令

<2>、使用 kubectl 工具

kubectl 工具可以查看集群信息

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
------------上面在master节点中只要运行一次即可-----------
kubectl get nodes --- 查看node情况

<3>、安装 Pod 网络插件

vi kube-flannel.yml
注意:kube-flannel和安装k8s版本有关联的,如果更改k8s版本了需要去网上自己找可以用kube-flannel配置

具体内容看附件

安装完成后

kubectl apply -f kube-flannel.yml --- 给kubectl apply设置一个yml源
kubectl get pods -n kube-system --- 查看pod的运行情况

#再次查看node节点信息
kubectl get nodes

补充:kube-flannel.yml如果有问题,需要先卸载后,更改里面的内容,再重新执行

kubectl apply -f kube-flannel.yml --- 运行 kube-flannel.yml
注意:kubectl apply -f 会从kube-flannel.yml读取资源配置【类似docker-compose】,会先通过
网络下载镜像,所以必须联网,有时候可能网络问题导致无法成功,检查一下网络
kubectl delete -f kube-flannel.yml --- 卸载 kube-flannel.yml
第三步:Node节点安装

使用第二步、<2>中的那句“kubeadm join” 就可以将node节点加载到集群中

第四步:测试集群【master进行】

在 Kubernetes 集群中创建一个 pod【tomcat】,验证是否正常运行:

kubectl create deployment tomcat --image=tomcat:8.5.23 --- 拉取tomcat
kubectl get pod --- 查看pod拉取情况
kubectl expose deployment tomcat --port=8080 --type=NodePort --- 开启一个服务,暴露8080端口
kubectl get pod,svc --- 查看服务情况

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
k8s是一个用于容器编排和管理的开源平台,而Spring Boot是一个用于构建独立的、基于Spring的Java应用程序的框架。使用k8s部署Spring Boot应用程序可以提供更好的可伸缩性、高可用性和容错性。 引用中提到了使用k8s来快速部署一个Spring Boot项目,并体验k8s和实际项目的结合。这意味着通过k8s,你可以轻松地将你的Spring Boot应用程序部署到一个分布式系统中。 引用指出,尽管已经了解了如何通过其他方式部署Spring Boot应用程序,但是了解如何通过k8s部署仍然是必要的。因为k8s提供了许多功能和特性,例如自动扩展、负载均衡和故障恢复等,这些功能可以大大简化和改善应用程序的部署和管理。 引用提到了k8s部署Spring Boot项目的过程是相对简单的,目前可能只是半手动部署,但后续可以引入CICD(持续集成和持续部署)实现真正的自动化部署。这意味着你可以使用k8s和CICD工具来自动化构建、测试和部署Spring Boot应用程序,从而提高开发和部署的效率。 综上所述,通过k8s部署Spring Boot应用程序可以提供更好的可伸缩性、高可用性和容错性,并且可以使用CICD工具实现自动化部署。这将简化和改善应用程序的部署和管理,并提高开发和部署的效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [k8s部署springboot项目](https://blog.csdn.net/qq_34285557/article/details/124460872)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [教你使用k8s部署springboot服务](https://blog.csdn.net/ww2651071028/article/details/129636489)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值