【云原生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的三种网络

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

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
4天前
|
运维 监控 Cloud Native
构建高效稳定的云原生应用部署策略
【5月更文挑战第17天】 在现代软件工程实践中,云原生架构已成为实现敏捷开发、持续交付和微服务治理的关键。本文深入探讨了如何构建一个既能满足业务快速迭代需求,又能保障系统稳定性的云原生应用部署策略。通过分析容器化技术、微服务设计原则以及自动化部署工具的选择与使用,提出了一种综合部署流程优化方案。文章旨在为运维工程师提供一种系统性解决方案,以应对复杂多变的生产环境挑战。
11 1
|
3天前
|
XML JavaScript 数据格式
DOM 节点列表长度(Node List Length)
`length`属性用于获取DOM节点列表的元素数量。在示例中,加载&quot;books.xml&quot;后,通过getElementsByTagName(&quot;title&quot;)获取标题节点列表,然后使用`for`循环遍历列表,输出每个标题的文本内容。此代码演示了如何处理XML文档中的节点集合。
|
4天前
|
监控 Cloud Native 测试技术
构建高效稳定的云原生应用部署策略
【5月更文挑战第17天】 在现代软件工程实践中,云原生应用的持续集成与部署(CI/CD)已成为提升开发效率、确保产品质量的关键因素。本文将探讨构建一个高效且稳定的云原生应用部署策略,涵盖从自动化测试到多阶段部署流程的设计。通过分析容器化技术、微服务架构以及自动化工具的应用,我们旨在为运维工程师提供一套优化部署流程的解决方案,以实现快速迭代和高可用性的平衡。
|
5天前
|
运维 Kubernetes Shell
Kubernetes详解(十二)——节点选择器与资源注解
Kubernetes详解(十二)——节点选择器与资源注解
21 2
|
6天前
|
监控 安全 Cloud Native
【云原生之Docker实战】使用Docker部署Ward服务器监控工具
【5月更文挑战第11天】使用Docker部署Ward服务器监控工具
26 3
|
6天前
|
Cloud Native 安全 Linux
【云原生之Docker实战】使用Docker部署mBlog微博系统
【5月更文挑战第10天】使用Docker部署mBlog微博系统
17 2
|
6天前
|
JSON JavaScript 前端开发
❤Nodejs 第九章(token身份认证和express-jwt的安装认识)
【4月更文挑战第9天】Node.js第九章介绍了Token身份认证,特别是JWT(JSON Web Token)作为跨域认证的解决方案。JWT由Header、Payload和Signature三部分组成,用于在客户端和服务器间安全传输用户信息。前端收到JWT后存储在localStorage或sessionStorage中,并在请求头中发送。Express-JWT是一个中间件,用于解析JWT。基本用法包括设置secret和algorithms。注意安全问题,避免混合使用不同算法以防止降级攻击。
46 0
|
6天前
|
JavaScript Windows
Win7内网安装高版本的Node方法,亲测有效node-v16.16.0
Win7内网安装高版本的Node方法,亲测有效node-v16.16.0
70 0
|
6天前
|
移动开发 JavaScript 前端开发
为了学习vue3,安装nvm进行node的多版本管理
为了学习vue3,安装nvm进行node的多版本管理
23 2
|
6天前
|
资源调度 jenkins 持续交付
jenkins 自动安装nodejs16.16.0版本报错处理
jenkins 自动安装nodejs16.16.0版本报错处理
35 0