一、版本信息

名称 版本
kubernetes 1.22.5
etcd 3.5.2
docker 19.03.8
flannel 0.14.0
cni 0.8.6

CNI:容器网络接口(Container NetWork Interface)。CNI最初是由CoreOS为rkt容器引擎创建的,目前绝大部分的容器平台都采用CNI标准,已经成为事实标准。(Docker并没有采用CNI标准,而是CNM标准,即Container NetWork Model)

前提条件:通过二进制的方式,部署一个Kubernetes集群,集群部署完成(节点都加入集群,但都是NotReady状态),具体部署方式可参考之前的部署文章。

二、安装CNI

在kubelet官方配置文档中,关于cni的配置一共有三项:

  • --cni-bin-dir string Default: /opt/cni/bin
  • --cni-cache-dir string Default: /var/lib/cni/cache
  • --cni-conf-dir string Default: /etc/cni/net.d

从上面的配置可以看出,我们需要把CNI及其配置文件放知道特定的目录下,或者自己指定不同的目录,并配置到kubelet的启动参数中。本文采用默认配置,则不需要修改kubelet的启动参数配置。

# 1、下载cni
wget https://github.com//containernetworking/plugins/releases/download/v0.8.6/cni-plugins-linux-amd64-v0.8.6.tgz# 2、解压缩到指定目录(kubernetes默认的cni安装路径是/opt/cni/bin,所以需要将cni解压缩到此目录)
mkdir /opt/cni/bin -p
tar xf cni-plugins-linux-amd64-v0.8.6.tgz -C /opt/cni/bin/# 3、将此目录复制到其余节点
for i in node01 node02;do scp -r /opt/cni/ $i:/opt/;done# 4、配置cni
cat > /etc/cni/net.d/10-flannel.conflist <<EOF
{"name": "cbr0","cniVersion": "0.3.1","plugins": [{"type": "flannel","delegate": {"hairpinMode": true,"isDefaultGateway": true}},{"type": "portmap","capabilities": {"portMappings": true}}]
}
EOF# 5、将配置文件复制到其余节点
for i in node01 node02;do scp -r /etc/cni $i:/etc/;done

三、安装flannel

# 1、下载flannel
wget https://github.com/flannel-io/flannel/releases/download/v0.14.0/flannel-v0.14.0-linux-amd64.tar.gz# 2、解压缩并把二进制flanneld放到指定位置
tar zvxf flannel-v0.17.0-linux-amd64.tar.gz
mv flanneld /usr/local/bin/# 3、把二进制flanneld复制到其余节点
for i in node01 node02;do scp /usr/local/bin/flanneld $i:/usr/local/bin/;done# 4、配置flannel
mkdir /etc/kube-flannel/
cat > /etc/kube-flannel/net-conf.json <<EOF
{"Network": "172.244.0.0/16",    # kubernetes集群子网网段,要与kubernetes子网段配置保持一致"Backend": {"Type": "vxlan","DirectRouting": true}
}
EOF# 5、将配置文件复制到其余节点
for i in node01 node02;do scp -r /etc/kube-flannel/ $i:/etc/;done

四、配置flannel的kube-config

通过kube-config使得flannel可以访问kubernetes集群

# 1、为flannel创建service account并初始化集群角色
cat <<EOF| kubectl apply -f -
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: flannel
rules:
- apiGroups: ['extensions']resources: ['podsecuritypolicies']verbs: ['use']resourceNames: ['psp.flannel.unprivileged']
- apiGroups:- ""resources:- podsverbs:- get
- apiGroups:- ""resources:- nodesverbs:- list- watch
- apiGroups:- ""resources:- nodes/statusverbs:- patch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: flannel
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: flannel
subjects:
- kind: ServiceAccountname: flannelnamespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:name: flannelnamespace: kube-system
EOF# 2、生成kube-config
mkdir /opt/flannel
cd /opt/flannel
KUBE_APISERVER="https://172.16.166.87:6443"      # 修改为自己集群的kube-apiserver地址
KUBE_ROOT_CA_FILE="/opt/kubernetes/ssl/ca.pem"   # 修改为自己集群的根证书地址kubectl config set-cluster kubernetes \
--kubeconfig=flannel.conf \
--embed-certs \
--server=${KUBE_APISERVER} \
--certificate-authority=${KUBE_ROOT_CA_FILE}kubectl config set-credentials flannel \
--kubeconfig=flannel.conf \
--token=$(kubectl get sa -n kube-system flannel -o jsonpath={.secrets[0].name} | xargs kubectl get secret -n kube-system  -o jsonpath={.data.token} | base64 -d)kubectl config set-context kubernetes \
--kubeconfig=flannel.conf \
--user=flannel \
--cluster=kuberneteskubectl config use-context kubernetes \
--kubeconfig=flannel.conf# 3、将该证书复制到其余节点
for i in node01 node02;do scp -r /opt/flannel/ $i:/opt/;done

五、通过systemd管理flannel并启动

# 1、生成systemd管理flannel的文件
cat > /usr/lib/systemd/system/flanneld.service <<EOF
[Unit]
Description=Flanneld
After=network.target
After=network-online.target
Wants=network-online.target
After=etcd.service[Service]
Type=notify
Environment=NODE_NAME=master01             # 此处修改为当前节点的hostname,并保持与kubelet配置中的hostname-override配置的名称一致,否则会报节点NotFound的错误
ExecStart=/usr/local/bin/flanneld \\--iface=enp5s0 \\                        # 此处修改为当前节点的物理网卡名称--ip-masq \\--kube-subnet-mgr=true \\--kubeconfig-file=/opt/flannel/flannel.confRestart=always
RestartSec=5
StartLimitInterval=0[Install]
WantedBy=multi-user.target
EOF# 2、将该文件复制到其余节点
for i in node01 node02;do scp /usr/lib/systemd/system/flanneld.service $i:/usr/lib/systemd/system/;done# 3、所有节点启动flannel
systemctl daemon-reload
systemctl start flanneld
systemctl status flanneld
systemctl enable flanneld# 4、所有节点重启kubelet,此处注意
systemctl restart kubelet# 5、所有节点启动成功后,都会在各个节点的/run/flannel/目录下生成一个subnet.env的文件,里面记录了当前节点的子网段信息,具体相关信息可以查看之前关于网络的一篇文章
cat /run/flannel/subnet.env
FLANNEL_NETWORK=172.244.0.0/16
FLANNEL_SUBNET=172.244.0.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true

此时查看节点状态,发现节点已经是Ready状态,证明flannel安装成功。通过此次安装,可以了解到这种设计的思想,即通过服务接口加grpc访问的方式,实现不同网络插件和kubernetes的解耦,达到了网络插件的可插拔目标。这种思想kubernetes同样使用在了cri(容器运行时接口),后续会再了解cri的相关实现。

参考文章连接:https://soulchild.cn/2509.html

Kubernetes集群二进制部署flannel相关推荐

  1. Kubernetes集群的部署方式及详细步骤

    一.部署环境架构以及方式 第一种部署方式 1.针对于 master 节点 将 API Server.etcd.controller-manager.schedule各组件进行 yum install. ...

  2. 在Kubernetes集群上部署和管理JFrog Artifactory

    JFrog Artifactory是一个artifacts仓库管理平台,它支持所有的主流打包格式.构建工具和持续集成(CI)服务器.它将所有二进制内容保存在一个单一位置并提供一个接口,这使得用户在整个 ...

  3. kubernetes集群快速部署1.23

    kubernetes集群快速部署1.23 文章目录 kubernetes集群快速部署1.23 1.环境准备(所有节点) 2.配置免密登录 3.配置ipv4 4.安装docker(所有节点) 5.部署k ...

  4. 在Kubernetes集群上部署高可用Harbor镜像仓库

    这里主要介绍使用kubectl部署Harbor镜像仓库到Kubernetes集群中. 使用Helm部署,参考: https://my.oschina.net/u/2306127/blog/181969 ...

  5. k8s和harbor的集成_在Kubernetes集群上部署高可用Harbor镜像仓库

    在Kubernetes集群上部署高可用Harbor镜像仓库 一.Kubernetes上的高可用Harbor方案 首先,我可以肯定给出一个回答:Harbor支持在Kubernetes部署.只不过Harb ...

  6. K8S搭建单Master集群(二进制部署方式)

    一. 安装要求 (1)多台服务器,操作系统 CentOS7.6-86_x64 (2)硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘40GB或更多 (3)可以访问外网,需要拉取镜像,如果服务 ...

  7. k8s集群二进制部署 1.17.3

    K8s简介 Kubernetes(简称k8s)是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容 ...

  8. Kubernetes集群中部署Node节点

    Kubernetes集群中的Node节点部署 kubernetes的Node节点包含如下组件: flanneld docker kubelet kube-proxy 环境变量 需要的变量. $ # 替 ...

  9. Kubernetes——Kubernetes集群docekr部署

    摘要 Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规 ...

最新文章

  1. SQL: ORA-00979 不是 GROUP BY 表达式 及 Group by 的用法说明
  2. JavaScript四舍五入的改进
  3. 《陶哲轩实分析》部分勘误
  4. jzoj4739-[雅礼联考GDOI2017模拟9.2]Ztxz16学图论【LCT,树状数组】
  5. 织梦联动类别-地区调用不显示第三级城市的解决方法
  6. 远程桌面无法连接服务器,启动Terminal Services 服务报1053错误
  7. 轻量化版本优于MobileNet系列 | Tokens-to-Token ViT: Training Vision Transformers from Scratch on ImageNet
  8. 简单解释什么是 依赖注入 和 控制反转 1
  9. 华为绩效管理PBC:以责任结果为导向,正确评价价值
  10. cad文件管理服务器,CAD文件管理(ZT)
  11. C++函数模板(模板函数)详解
  12. 电路基础-二阶(second -order) 电路
  13. httpclient3与httpclient4不同版本使用方法
  14. 数据挖掘--决策树ID3+k-means聚类分析西瓜数据
  15. 如何批量从多个 Word 文档中提取图片
  16. 京东话费充值系统架构演讲读后感
  17. winform datagridview 没有出现垂直滚动条 上下_木门安装中出现问题如何解决?
  18. 普通人考出PMP到底有用吗?
  19. 快递电子面单批量打印接口对接demo-JAVA
  20. 为什么看不到局域网其他计算机名,windows10系统局域网看不到计算机名怎么办

热门文章

  1. shell语法----文件重定向
  2. 7. 查询表student——查询全体学生的姓名、学号、所在系。
  3. 我的U3D 学习之旅
  4. 信用融资:通向成功之路——黄一老师
  5. 2015最新款连衣裙的搭配
  6. 我从来看多中国 看空欧美韩日
  7. Spring MVC注解、标签库、国际化
  8. 【前端工程化】使用轮询的方式,监控网络状态,检测是否断网
  9. 计算机桌面弹窗,如何关闭电脑桌面弹出的广告
  10. 啊,潜水半年,再次浮出水面