【云原生Kubernetes】二进制搭建Kubernetes集群(中)——部署node节点(2)

简介: 上一篇中已部署了etcd分布式数据库、master01节点,本文将部署Kubernetes集群中的 worker node 节点和 CNI 网络插件。

附录3:proxy.sh

#!/bin/bash
 #example:proxy.sh 192.168.41.42
 #脚本后跟的位置参数1是node节点的IP地址。
 NODE_ADDRESS=$1
 #创建 kube-proxy 启动参数配置文件
 cat >/opt/kubernetes/cfg/kube-proxy <<EOF
 KUBE_PROXY_OPTS="--logtostderr=true \
 --v=4 \
 --hostname-override=${NODE_ADDRESS} \
 --cluster-cidr=172.17.0.0/16 \
 --proxy-mode=ipvs \
 --kubeconfig=/opt/kubernetes/cfg/kube-proxy.kubeconfig"
 EOF
 #--hostnameOverride: 参数值必须与 kubelet 的值一致,否则 kube-proxy 启动后会找>不到该 Node,从而不会创建任何 ipvs 规则
 #--cluster-cidr:指定 Pod 网络使用的聚合网段,Pod 使用的网段和 apiserver 中指定的 service 的 cluster ip 网段不是同一个网段。 kube-proxy 根据 --cluster-cidr 判断集群内部和外部流量,指定 --cluster-cidr 选项后 kube-proxy 才会对访问 Service IP 的请求做 SNAT,即来自非 Pod 网络的流量被当成外部流量,访问 Service 时需要做 SNAT。
 #--proxy-mode:指定流量调度模式为ipvs模式,可添加--ipvs-scheduler选项指定ipvs调度算法(rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)
 #--kubeconfig: 指定连接 apiserver 的 kubeconfig 文件
 #----------------------
 #创建 kube-proxy.service 服务管理文件
 cat >/usr/lib/systemd/system/kube-proxy.service <<EOF
 [Unit]
 Description=Kubernetes Proxy
 After=network.target
 [Service]
 EnvironmentFile=-/opt/kubernetes/cfg/kube-proxy
 ExecStart=/opt/kubernetes/bin/kube-proxy $KUBE_PROXY_OPTS
 Restart=on-failure
 [Install]
 WantedBy=multi-user.target
 EOF
 systemctl daemon-reload
 systemctl enable kube-proxy
 systemctl restart kube-proxy
复制代码


4.3 部署网络组件

网络插件主要两种:Flannel、Calico。安装其中任意一个即可。

我们这里使用方法二,安装Calico网络插件。

方法一:部署Flannel

#--------------在 node01 节点上操作---------------
 #上传 cni-plugins-linux-amd64-v0.8.6.tgz 和 flannel.tar 到 /opt 目录中
 cd /opt/
 docker load -i flannel.tar
 docker images
 #解压
 mkdir /opt/cni/bin
 tar zxvf cni-plugins-linux-amd64-v0.8.6.tgz -C /opt/cni/bin
 #传给node02节点
 scp cni/ flannel.tar root@192.168.41.43:/root/
 docker load -i flannel.tar
 #---------------在 master01 节点上操作-----------------
 #上传 kube-flannel.yml 文件到 /opt/k8s 目录中,部署 CNI 网络
 cd /opt/k8s
 kubectl apply -f kube-flannel.yml 
 kubectl get pods -n kube-system
 NAME                    READY   STATUS    RESTARTS   AGE
 kube-flannel-ds-hjtc7   1/1     Running   0          7s
 kubectl get nodes
 NAME            STATUS   ROLES    AGE   VERSION
 192.168.41.42   Ready    <none>   81m   v1.20.11
复制代码


方法二:部署 Calico

#--------------------在 master01 节点上操作---------------------------------
 #calico.yaml 文件可以直接从网上获取,使用wget下载即可
 #上传 calico.yaml 文件到 /opt/k8s 目录中,部署 CNI 网络
 cd /opt/k8s
 vim calico.yaml
 #修改里面定义Pod网络(CALICO_IPV4POOL_CIDR),要与前面kube-controller-manager配置文件指定的cluster-cidr网段一致
     - name: CALICO_IPV4POOL_CIDR
       value: "10.244.0.0/16"    #默认是192.168.0.0/16,需要改成和kube-controller-manager配置文件指定的cluster-cidr网段一致
 #通过calico.yaml资源清单,使用kubectl apply创建pod,-f指定清单文件
 kubectl apply -f calico.yaml
 #等待1~2分钟,查看pod状态,-n指定命名空间,默认是default命名空间。都是Running状态就OK了。
 kubectl get pods -n kube-system
 NAME                                       READY   STATUS    RESTARTS   AGE
 calico-kube-controllers-659bd7879c-gq5fb   1/1     Running   0          2m53s
 calico-node-dd4gc                          1/1     Running   0          2m53s
 calico-node-rg299                          1/1     Running   0          2m53s
 #再次查看集群的节点信息,都是Ready状态。
 #等 Calico Pod 都 Running,节点也会准备就绪
 kubectl get nodes
 NAME            STATUS   ROLES    AGE   VERSION
 192.168.41.42   Ready    <none>   73m   v1.20.11
 192.168.41.43   Ready    <none>   74m   v1.20.11
 #至此,单master节点k8s集群就部署成功了
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


4.4 部署 CoreDNS

CoreDNS:可以为集群中的 service 资源创建一个域名与 IP 的对应关系解析。

service发现是k8s中的一个重要机制,其基本功能为:在集群内通过服务名对服务进行访问,即需要完成从服务名到ClusterIP的解析。

k8s主要有两种service发现机制:环境变量和DNS。没有DNS服务的时候,k8s会采用环境变量的形式,但一旦有多个service,环境变量会变复杂,为解决该问题,我们使用DNS服务。

#---------------1、在所有 node 节点上操作-----------------
 #上传 coredns.tar 到 /opt 目录中,之后导入镜像
 cd /opt
 docker load -i coredns.tar
 #---------------2、在 master01 节点上操作-----------------
 #上传 coredns.yaml 文件到 /opt/k8s 目录中,部署 CoreDNS 
 cd /opt/k8s
 #通过coredns.yaml资源清单,使用kubectl apply创建该pod,-f指定清单文件
 kubectl apply -f coredns.yaml
 #等待1~2分钟,查看pod状态,-n指定命名空间,默认是default命名空间。coredns是Running状态就OK了。
 kubectl get pods -n kube-system 
 NAME                              READY   STATUS    RESTARTS   AGE
 coredns-6954c77b9b-r4lc6          1/1     Running   0          5m21s
 #DNS 解析测试
 kubectl run -it --rm dns-test --image=busybox:1.28.4 sh
 If you don't see a command prompt, try pressing enter.
 / # nslookup kubernetes
 Server:    10.0.0.2
 Address 1: 10.0.0.2 kube-dns.kube-system.svc.cluster.local
 Name:      kubernetes
 Address 1: 10.0.0.1 kubernetes.default.svc.cluster.local
 / #
复制代码


1、在所有 node 节点上操作

网络异常,图片无法展示
|


2、在 master01 节点上操作

网络异常,图片无法展示
|


网络异常,图片无法展示
|


五、CNI网络插件介绍

5.1 Kubernetes的三种网络

网络异常,图片无法展示
|

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
JSON JavaScript Linux
【MCP教程系列】Node.js+TypeScript搭建NPX MCP服务并自定义部署至阿里云百炼
本文介绍如何将阿里云百炼的工作流封装成MCP服务并部署,随后引入到智能体中使用。主要步骤包括:1) 封装MCP服务;2) 发布到npm官方平台;3) 在阿里云百炼平台创建自定义MCP服务;4) 在智能体中添加自定义MCP服务。通过这些步骤,用户可以轻松将工作流转化为MCP服务,并在智能体中调用。
4543 0
|
存储 Kubernetes 开发工具
使用ArgoCD管理Kubernetes部署指南
ArgoCD 是一款基于 Kubernetes 的声明式 GitOps 持续交付工具,通过自动同步 Git 存储库中的配置与 Kubernetes 集群状态,确保一致性与可靠性。它支持实时同步、声明式设置、自动修复和丰富的用户界面,极大简化了复杂应用的部署管理。结合 Helm Charts,ArgoCD 提供模块化、可重用的部署流程,显著减少人工开销和配置错误。对于云原生企业,ArgoCD 能优化部署策略,提升效率与安全性,是实现自动化与一致性的理想选择。
955 0
|
存储 Kubernetes 异构计算
Qwen3 大模型在阿里云容器服务上的极简部署教程
通义千问 Qwen3 是 Qwen 系列最新推出的首个混合推理模型,其在代码、数学、通用能力等基准测试中,与 DeepSeek-R1、o1、o3-mini、Grok-3 和 Gemini-2.5-Pro 等顶级模型相比,表现出极具竞争力的结果。
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
1243 33
|
Kubernetes 开发者 Docker
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
809 19
|
存储 测试技术 对象存储
使用容器服务ACK快速部署QwQ-32B模型并实现推理智能路由
阿里云最新发布的QwQ-32B模型,通过强化学习大幅度提升了模型推理能力。QwQ-32B模型拥有320亿参数,其性能可以与DeepSeek-R1 671B媲美。
|
Kubernetes 网络协议 应用服务中间件
K8S二进制部署实践-1.15.5
K8S二进制部署实践-1.15.5
292 0
|
存储 Kubernetes 负载均衡
CentOS 7.9二进制部署K8S 1.28.3+集群实战
本文详细介绍了在CentOS 7.9上通过二进制方式部署Kubernetes 1.28.3+集群的全过程,包括环境准备、组件安装、证书生成、高可用配置以及网络插件部署等关键步骤。
2915 4
CentOS 7.9二进制部署K8S 1.28.3+集群实战
|
Kubernetes 负载均衡 前端开发
二进制部署Kubernetes 1.23.15版本高可用集群实战
使用二进制文件部署Kubernetes 1.23.15版本高可用集群的详细教程,涵盖了从环境准备到网络插件部署的完整流程。
1022 4
二进制部署Kubernetes 1.23.15版本高可用集群实战

热门文章

最新文章

推荐镜像

更多