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

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 上一篇中已部署了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的三种网络

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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
打赏
0
0
0
0
12
分享
相关文章
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
120 33
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
73 19
打破资源边界、告别资源浪费:ACK One 多集群Spark和AI作业调度
ACK One多集群Spark作业调度,可以帮助您在不影响集群中正在运行的在线业务的前提下,打破资源边界,根据各集群实际剩余资源来进行调度,最大化您多集群中闲置资源的利用率。
当node节点kubectl 命令无法连接到 Kubernetes API 服务器
当Node节点上的 `kubectl`无法连接到Kubernetes API服务器时,可以通过以上步骤逐步排查和解决问题。首先确保网络连接正常,验证 `kubeconfig`文件配置正确,检查API服务器和Node节点的状态,最后排除防火墙或网络策略的干扰,并通过重启服务恢复正常连接。通过这些措施,可以有效解决与Kubernetes API服务器通信的常见问题,从而保障集群的正常运行。
61 17
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
ACK One多集群Service帮助大批量应用跨集群无缝迁移
ACK One多集群Service可以帮助您,在无需关注服务间的依赖,和最小化迁移风险的前提下,完成跨集群无缝迁移大批量应用。
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
Node.js 是一种高效的 JavaScript 运行环境,基于 Chrome V8 引擎,支持在服务器端运行 JavaScript 代码。本文介绍如何在阿里云上一键部署 Node.js 环境,无需繁琐配置,轻松上手。前提条件包括 ECS 实例运行中且操作系统为 CentOS、Ubuntu 等。功能特点为一键安装和稳定性好,支持常用 LTS 版本。安装步骤简单:登录阿里云控制台,选择扩展程序管理页面,安装 Node.js 扩展,选择实例和版本,等待创建完成并验证安装成功。通过阿里云的公共扩展,初学者和经验丰富的开发者都能快速进入开发状态,开启高效开发之旅。
前端开发必备!Node.js 18.x LTS保姆级安装教程(附国内镜像源配置)
本文详细介绍了Node.js的安装与配置流程,涵盖环境准备、版本选择(推荐LTS版v18.x)、安装步骤(路径设置、组件选择)、环境验证(命令测试、镜像加速)及常见问题解决方法。同时推荐开发工具链,如VS Code、Yarn等,并提供常用全局包安装指南,帮助开发者快速搭建高效稳定的JavaScript开发环境。内容基于官方正版软件,确保合规性与安全性。
412 23
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
62 2
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!

热门文章

最新文章