当前位置: 首页 > news >正文

k8s 二进制部署安装(二)

目录

部署worker node 组件

部署 CNI 网络组件

部署 flannel


之前我们已经部署安装好了master的组件和etcd ,接下来到node节点的组件和网络相关的组件了

部署worker node 组件

在所有的node节点上操作↓

创建kubernetes工作目录

mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}

cd /opt

编辑kubelet 和 proxy 脚本文件

vim kubelet.sh

#!/bin/bash

NODE_ADDRESS=$1 DNS_SERVER_IP=${2:-"10.0.0.2"}

cat >/opt/kubernetes/cfg/kubelet <<EOF KUBELET_OPTS="--logtostderr=false \ --v=2 \ --log-dir=/opt/kubernetes/logs \ --hostname-override=${NODE_ADDRESS} \ --network-plugin=cni \ --kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig \ --bootstrap-kubeconfig=/opt/kubernetes/cfg/bootstrap.kubeconfig \ --config=/opt/kubernetes/cfg/kubelet.config \ --cert-dir=/opt/kubernetes/ssl \ --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0" EOF

 cat >/opt/kubernetes/cfg/kubelet.config <<EOF kind: KubeletConfiguration apiVersion: kubelet.config.k8s.io/v1beta1 address: ${NODE_ADDRESS} port: 10250 readOnlyPort: 10255 cgroupDriver: cgroupfs clusterDNS:

- ${DNS_SERVER_IP} clusterDomain: cluster.local failSwapOn: false authentication: anonymous: enabled: true EOF

>/usr/lib/systemd/system/kubelet.service <<EOF [Unit] Description=Kubernetes Kubelet After=docker.service Requires=docker.service

[Service] EnvironmentFile=/opt/kubernetes/cfg/kubelet ExecStart=/opt/kubernetes/bin/kubelet $KUBELET_OPTS Restart=on-failure KillMode=process

[Install] WantedBy=multi-user.target EOF

systemctl daemon-reload systemctl enable kubelet systemctl restart kubelet

vim proxy.sh

#!/bin/bash

NODE_ADDRESS=$1
cat >/opt/kubernetes/cfg/kube-proxy <<EOF
KUBE_PROXY_OPTS="--logtostderr=false \\
--v=2 \\
--log-dir=/opt/kubernetes/logs \\
--hostname-override=${NODE_ADDRESS} \\
--cluster-cidr=10.244.0.0/16 \\
--proxy-mode=ipvs \\
--kubeconfig=/opt/kubernetes/cfg/kube-proxy.kubeconfig"
EOF
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

为两个文件赋权

chmod +x kubelet.sh proxy.sh

回到master节点操作↓

将 kubelet、kube-proxy 拷贝到两台node节点机器上

scp kubelet kube-proxy root@172.16.233.103:/opt/kubernetes/bin/

scp kubelet kube-proxy root@172.16.233.104:/opt/kubernetes/bin/

mkdir /opt/k8s/kubeconfig

cd /opt/k8s/kubeconfig/

vim kubeconfig.sh

#!/bin/bash

BOOTSTRAP_TOKEN=$(awk -F ',' '{print $1}' /opt/kubernetes/cfg/token.csv)
APISERVER=$1
SSL_DIR=$2

export KUBE_APISERVER="https://$APISERVER:6443"


kubectl config set-cluster kubernetes \
  --certificate-authority=$SSL_DIR/ca.pem \
  --embed-certs=true \
  --server=${KUBE_APISERVER} \
  --kubeconfig=bootstrap.kubeconfig

kubectl config set-credentials kubelet-bootstrap \
  --token=${BOOTSTRAP_TOKEN} \
  --kubeconfig=bootstrap.kubeconfig
kubectl config set-context default \
  --cluster=kubernetes \
  --user=kubelet-bootstrap \
  --kubeconfig=bootstrap.kubeconfig
kubectl config use-context default --kubeconfig=bootstrap.kubeconfig
kubectl config set-cluster kubernetes \
  --certificate-authority=$SSL_DIR/ca.pem \
  --embed-certs=true \
  --server=${KUBE_APISERVER} \
  --kubeconfig=kube-proxy.kubeconfig
kubectl config set-credentials kube-proxy \
  --client-certificate=$SSL_DIR/kube-proxy.pem \
  --client-key=$SSL_DIR/kube-proxy-key.pem \
  --embed-certs=true \
  --kubeconfig=kube-proxy.kubeconfig
kubectl config set-context default \
  --cluster=kubernetes \
  --user=kube-proxy \
  --kubeconfig=kube-proxy.kubeconfig
kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig
 

赋权

chmod +x kubeconfig.sh

运行

./kubeconfig.sh 172.16.233.101 /opt/k8s/k8s-cert/

把运行脚本后生成的配置文件 bootstrap.kubeconfig、kube-proxy.kubeconfig 拷贝到 node 节点

scp bootstrap.kubeconfig kube-proxy.kubeconfig root@172.16.233.103:/opt/kubernetes/cfg/

scp bootstrap.kubeconfig kube-proxy.kubeconfig root@172.16.233.104:/opt/kubernetes/cfg/

接下来进行RBAC授权

先给kubectl绑定默认cluster-admin管理员集群角色,授权集群操作权限

kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous

再进行授权,使用户 kubelet-bootstrap 能够有权限发起 CSR 请求证书

kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap

顺序错误可能导致执行失败

回到node01节点上操作

启动kubelet服务

cd /opt

./kubelet.sh 172.16.233.103

ps aux | grep kubelet

master节点  

检查到 node01 节点的 kubelet 发起的 CSR 请求,Pending 表示等待集群给该节点签发证书

kubectl get csr

通过 CSR 请求

kubectl certificate approve node-csr-BDV5w8pO9C9Dx5rTshnhprdGMF03WVtg2o9CR7i3RdY

approved 、issued 表示已授权CSR 请求并签发证书

查看节点,由于网络插件还没有部署,所以节点状态会显示notready

kubectl get node

在node01节点上操作

加载 ip_vs 模块

for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^.*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done

启动 proxy 服务

cd /opt/

./proxy.sh 172.16.233.103

ps aux | grep kube-proxy

部署 CNI 网络组件

部署 flannel

Flannel 的功能是让集群中的不同节点主机创建的 Docker 容器都具有全集群唯一的虚拟 IP 地址。

Flannel 是 Overlay 网络的一种,也是将 TCP 源数据包封装在另一种网络包里面进行路由转发和通信,目前支持 UDP、VXLAN、Host-gw 3种数据转发方式。

Flannel UDP 模式的工作原理:

数据从主机 A 上 Pod 的源容器中发出后,经由所在主机的 docker0/cni0 网络接口转发到 flannel0 接口,flanneld 服务监听在 flannel0 虚拟网卡的另外一端。 Flannel 通过 Etcd 服务维护了一张节点间的路由表。源主机 A 的 flanneld 服务将原本的数据内容封装到 UDP 报文中, 根据自己的路由表通过物理网卡投递给目的节点主机 B 的 flanneld 服务,数据到达以后被解包,然后直接进入目的节点的 flannel0 接口, 之后被转发到目的主机的 docker0/cni0 网桥,最后就像本机容器通信一样由 docker0/cni0 转发到目标容器。

Flannel VXLAN 模式跨主机的工作原理:

数据帧从主机 A 上 Pod 的源容器中发出后,经由所在主机的 docker0/cni0 网络接口转发到 flannel.1 接口 ;flannel.1 收到数据帧后添加 VXLAN 头部,封装在 UDP 报文中;主机 A 通过物理网卡发送封包到主机 B 的物理网卡中 ;主机 B 的物理网卡再通过 VXLAN 默认端口 4789 转发到 flannel.1 接口进行解封装;解封装以后,内核将数据帧发送到 cni0,最后由 cni0 发送到桥接到此接口的容器 B 中。

在 node01 节点上操作

上传 cni-plugins-linux-amd64-v0.8.6.tgz 和 flannel.tar 到 /opt 中

cd /opt/

docker load -i flannel.tar

mkdir /opt/cni/bin

tar zxvf cni-plugins-linux-amd64-v0.8.6.tgz -C /opt/cni/bin

在 master01 节点上操作

上传 kube-flannel.yml 文件到 /opt/k8s 目录中,部署 CNI 网络

cd /opt/k8s

kubectl apply -f kube-flannel.yml

kubectl get pods -n kube-system

列出 kube-system 命名空间中的所有 Pod


http://www.mrgr.cn/news/60509.html

相关文章:

  • 情感咨询小程序的市场需求大吗?
  • Spring Boot实战:打造现代租房管理系统
  • 合约门合同全生命周期管理系统:企业合同管理的数字化转型之道
  • 融云IM信息托管服务,用户资料、好友关系、群组信息全覆盖
  • Kubernetes运行大数据组件-制作镜像
  • Java - 人工智能;SpringAI
  • Docker 常用命令全解析:提升对雷池社区版的使用经验
  • JAVA是世界上最美丽的语言------拒绝焦虑,赶紧背诵!
  • 【学术会议论文投稿】前端框架巅峰对决:React、Vue与Angular的全面解析与实战指南
  • 【考前冲刺】24下软考考试,无非就这2套模拟卷!
  • 用git上传项目到GitHub(最简单的操作)
  • ZDS 数字股票:携手全球高校,吸引行业精英,共创金融未来
  • 【网络安全零基础入门】一文搞懂Javascript实现Post请求、Ajax请求、输出数据到页面、实现前进后退、文件上传
  • 时代新机遇来袭,创客匠人首届全球创始人 IP 领袖峰会定档
  • JNI概要
  • Flutter-Engine 的定制实践:Text 绘制流程浅析及自定义underline的间距
  • EasyExcel文件导入与导出
  • 手机号二要素核验 API 对接说明
  • Nature正刊!Peter Reich院士团队最新重磅成果!一项为期24年的控制实验!
  • 【香蕉成熟度数据集】香蕉新鲜腐烂识别检测 目标检测 机器视觉 (含数据集)
  • CubeMX中的RCC功能详解
  • 线性表(1)
  • 2024年13个热门AI工具:涵盖思维导图、对话助理、绘画提示、批量抠图、翻译、音乐生成、文案撰写等功能
  • 安卓早期apk兼容性适配之内存读写
  • 等长运动:健身新概念,轻松提升肌肉力量
  • 目前市场主流的不同室内定位效果对比