云原生(第二篇)k8s-二进制搭建

准备五台机器:

master01:192.168.169.10

node01:192.168.169.40

node02:192.168.169.50

master02:192.168.169.60

负载均衡nginx+keepalive01(master):192.168.169.20

负载均衡nginx+keepalive01(master):192.168.169.30
 

前期准备:

1、关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

2、关闭selinux
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config

3、关闭swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab

4、根据规划设置主机名
hostnamectl set-hostname master01
hostnamectl set-hostname node01
hostnamectl set-hostname node02

5、在master添加hosts
cat >> /etc/hosts << EOF
192.168.169.10 master01
192.168.169.40 node01
192.168.169.50 node02
192.168.169.60 master02
EOF

6、调整内核参数
cat > /etc/sysctl.d/k8s.conf << EOF
#开启网桥模式,可将网桥的流量传递给iptables链
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
#关闭ipv6协议
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF

sysctl --system

7、时间同步
yum install ntpdate -y
ntpdate time.windows.com

8、node节点安装docker

安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2 

设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 

安装 Docker-CE并设置为开机自动启动
yum install -y docker-ce docker-ce-cli containerd.io

tar zxvf docker-19.03.9.tgz
mv docker/* /usr/bin


cat > /usr/lib/systemd/system/docker.service << EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target

[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target
EOF

systemctl start docker.service
systemctl enable docker.service

部署etcd:

准备cfssl证书生成工具

wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -O /usr/local/bin/cfssl
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -O /usr/local/bin/cfssljson
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -O /usr/local/bin/cfssl-certinfo

或者提前下载好上传

chmod +x /usr/local/bin/cfssl*

 生成Etcd证书

mkdir /opt/k8s
cd /opt/k8s/

上传 etcd-cert.sh 和 etcd.sh 到 /opt/k8s/ 目录中
chmod +x etcd-cert.sh etcd.sh

创建用于生成CA证书、etcd 服务器证书以及私钥的目录
mkdir /opt/k8s/etcd-cert
mv etcd-cert.sh etcd-cert/
cd /opt/k8s/etcd-cert/
先修改etcd-cert.sh的IP地址
./etcd-cert.sh            #生成CA证书、etcd 服务器证书以及私钥

上传 etcd-v3.4.26-linux-amd64.tar.gz 到 /opt/k8s 目录中,启动etcd服务
cd /opt/k8s/
tar zxvf etcd-v3.4.26-linux-amd64.tar.gz

 

创建用于存放 etcd 配置文件,命令文件,证书的目录
mkdir -p /opt/etcd/{cfg,bin,ssl}

cd /opt/k8s/etcd-v3.4.26-linux-amd64/
mv etcd etcdctl /opt/etcd/bin/
cp /opt/k8s/etcd-cert/*.pem /opt/etcd/ssl/

cd /opt/k8s/
./etcd.sh etcd01 192.168.169.10 etcd02=https://192.168.169.40:2380,etcd03=https://192.168.169.50:2380

可另外打开一个窗口查看etcd进程是否正常
ps -ef | grep etcd

 把etcd相关证书文件、命令文件和服务管理文件全部拷贝到另外两个etcd集群节点
scp -r /opt/etcd/ root@192.168.169.40:/opt/
scp -r /opt/etcd/ root@192.168.169.50:/opt/
scp /usr/lib/systemd/system/etcd.service root@192.168.169.40:/usr/lib/systemd/system/
scp /usr/lib/systemd/system/etcd.service root@192.168.169.50:/usr/lib/systemd/system/

在 node01 节点上,修改节点etcd的配置信息:

启动etcd服务:

systemctl start etcd
systemctl enable etcd
systemctl status etcd

检查etcd群集状态
ETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.169.10:2379,https://192.168.169.40:2379,https://192.168.169.50:2379" endpoint health --write-out=table

 ETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.169.10:2379,https://192.168.169.40:2379,https://192.168.169.50:2379" --write-out=table member list

 

 部署master组件:

在 master01 节点上操作:
上传 master.zip 和 k8s-cert.sh 到 /opt/k8s 目录中,解压 master.zip 压缩包
cd /opt/k8s/
unzip master.zip
chmod +x *.sh

 创建kubernetes工作目录
mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}

创建用于生成CA证书、相关组件的证书和私钥的目录
mkdir /opt/k8s/k8s-cert
mv /opt/k8s/k8s-cert.sh /opt/k8s/k8s-cert
cd /opt/k8s/k8s-cert/
先修改k8s-cert.sh里面的ip配置,并且把注释删除
./k8s-cert.sh                #生成CA证书、相关组件的证书和私钥

 出现这样就成功了:

复制CA证书、apiserver相关证书和私钥到 kubernetes工作目录的 ssl 子目录中
cp ca*pem apiserver*pem /opt/kubernetes/ssl/

上传 kubernetes-server-linux-amd64.tar.gz 到 /opt/k8s/ 目录中,解压 kubernetes 压缩包
cd /opt/k8s/
tar zxvf kubernetes-server-linux-amd64.tar.gz

复制master组件的关键命令文件到 kubernetes工作目录的 bin 子目录中
cd /opt/k8s/kubernetes/server/bin
cp kube-apiserver kubectl kube-controller-manager kube-scheduler /opt/kubernetes/bin/
ln -s /opt/kubernetes/bin/* /usr/local/bin/

 创建 bootstrap token 认证文件,apiserver 启动时会调用,然后就相当于在集群内创建了一个这个用户,接下来就可以用 RBAC 给他授权
cd /opt/k8s/
head -c 16 /dev/urandom | od -An -t x | tr -d ' ' 得到一串字符

vim /opt/kubernetes/cfg/token.csv

3afddd453b4c7df7d1c29052bcb2504c,kubelet-bootstrap,10001,"system:kubelet-bootstrap"

chmod +x token.sh

./token.sh 

二进制文件、token、证书都准备好后,开启 apiserver 服务

cd /opt/k8s/
./apiserver.sh 192.168.169.10 https://192.168.169.40:2379,https://192.168.169.50:2379,https://192.168.169.10:2379

检查进程是否启动成功
ps aux | grep kube-apiserver

netstat -natp | grep 6443   #安全端口6443用于接收HTTPS请求,用于基于Token文件或客户端证书等认证

 启动 scheduler 服务

 cd /opt/k8s/
修改scheduler.sh的ip
./scheduler.sh
ps aux | grep kube-scheduler

 启动 controller-manager 服务
修改controller-manager.sh的ip
./controller-manager.sh
ps aux | grep kube-controller-manager

 生成kubectl连接集群的kubeconfig文件
修改admin.sh的ip
./admin.sh

 绑定默认cluster-admin管理员集群角色,授权kubectl访问集群
kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous

通过kubectl工具查看当前集群组件状态
kubectl get cs

 查看版本信息
kubectl version

 

部署node组件:

创建kubernetes工作目录:
mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}

上传 node.zip 到 /opt 目录中,解压 node.zip 压缩包,获得kubelet.sh、proxy.sh
cd /opt/
unzip node.zip
chmod +x kubelet.sh proxy.sh

 在 master01 节点上操作:

把 kubelet、kube-proxy 拷贝到 node 节点
cd /opt/k8s/kubernetes/server/bin
scp kubelet kube-proxy root@192.168.169.40:/opt/kubernetes/bin/
scp kubelet kube-proxy root@192.168.169.50:/opt/kubernetes/bin/

 上传kubeconfig.sh文件到/opt/k8s/kubeconfig目录中,生成kubelet初次加入集群引导kubeconfig文件和kube-proxy.kubeconfig文件

mkdir /opt/k8s/kubeconfig
cd /opt/k8s/kubeconfig
chmod +x kubeconfig.sh
./kubeconfig.sh 192.168.169.10 /opt/k8s/k8s-cert/

把配置文件 bootstrap.kubeconfig、kube-proxy.kubeconfig 拷贝到 node 节点
scp bootstrap.kubeconfig kube-proxy.kubeconfig root@192.168.169.40:/opt/kubernetes/cfg/
scp bootstrap.kubeconfig kube-proxy.kubeconfig root@192.168.169.50:/opt/kubernetes/cfg/

RBAC授权,使用户 kubelet-bootstrap 能够有权限发起 CSR 请求证书
kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap

 可能出现问题:
error: failed to create clusterrolebinding: clusterrolebindings.rbac.authorization.k8s.io "kubelet-bootstrap" already exists

输入:kubectl delete clusterrolebinding kubelet-bootstrap
再次创建就好了!

 在 node01 节点上操作
#启动 kubelet 服务
cd /opt/
./kubelet.sh 192.168.169.40
ps aux | grep kubelet

在 master01 节点上操作,通过 CSR 请求
#检查到 node01 节点的 kubelet 发起的 CSR 请求,Pending 表示等待集群给该节点签发证书
kubectl get csr

 通过 CSR 请求
kubectl certificate approve node-csr-duiobEzQ0R93HsULoS9NT9JaQylMmid_nBF3Ei3NtFE

 再次查看kubectl get csr    Approved,Issued 表示已授权 CSR 请求并签发证书

 查看节点,由于网络插件还没有部署,节点会没有准备就绪 NotReady

可能出现的错误:No resources found
重启node节点上的kube-let服务
在/etc/docker/daemon.json上添加{"exec-opts": ["native.cgroupdriver=systemd"]}

在 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 192.168.169.40
ps aux | grep kube-proxy

 

部署CNI网络插件:(实现pod跨主机跨节点之间的通信)

flannel和calico区别?

①模式不同,flannel是udp hostgw vxlan  calico是ipip bgp 混合

②网段不同,flannel是10.244.0.0/16   calico是192.168.0.0/16

③flannel vxlan采用的是网络叠加,通过ip隧道方式传输数据,可以跨子网传输数据,传输过程需要封装解封装,性能不佳,可以做简单配置功能,方便管理,不能配置复杂的网络策略规则

calico ipip 也是网络叠加模式,通过ip隧道方式传输数据,传输过程中有封装和解封装的过程,性能不佳

calico bgp模式,直接通过bgp路由直接转发,不会有封装和解封装的过程,性能最好,只在同一局域网中转发,不能跨子网转发,可以配置复杂的网络策略规则,但是维护比较麻烦

④网络策略不同,flannel不能使用网络策略,calico使用dns policy  ingress policy等网络策略

flannel udp的工作原理:
应用数据通过源主机的pod发出,到cni0网桥接口,cni0在发送到flannel0中
flanneled会监听flannel0的数据变化,进行封装udp报文,暴露8285端口
然后通过flannel0在etcd中维护的路由表找到目标节点的ip,通过物理ip转发到目标主机
目标主机通过8285端口转发到flannel0上,进行解封装得到目标pod的ip,转发给cni0,在转发给pod,从而实现了pod跨节点的通信
 

在 node01 节点上操作:

上传 cni-plugins-linux-amd64-v0.8.6.tgz 和 flannel.tar 到 /opt 目录中
cd /opt/
docker load -i flannel.tar

mkdir /opt/cni/bin -p
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 -A

kubectl get nodes

 部署 CoreDNS:

在所有 node 节点上操作
上传 coredns.tar 到 /opt 目录中
cd /opt
docker load -i coredns.tar

 在 master01 节点上操作
上传 coredns.yaml 文件到 /opt/k8s 目录中,部署 CoreDNS 
cd /opt/k8s
kubectl apply -f coredns.yaml

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/136.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

word转pdf实现

写一下笔记&#xff0c;以便在以后工作中用到&#xff1a; 导包&#xff1a; <!--word 转 pdf--> <dependency><groupId>com.documents4j</groupId><artifactId>documents4j-local</artifactId><version>1.0.3</version> &l…

python3开发-AI智能联系人管理系统

目录 背景 1. 数据收集与存储&#xff1a; 2. 搜索与过滤&#xff1a; 3. AI智能功能&#xff1a; 4. 用户界面与交互&#xff1a; 5. 数据备份与恢复&#xff1a; 6. 安全与权限管理&#xff1a; 7. 测试与部署&#xff1a; 代码示例 1. 数据收集与存储&#xff08;…

谷歌浏览器无法翻译成中文,谷歌翻译,最新(沉浸式翻译和划词翻译,chrome无法翻译,谷歌浏览器无法翻译此网页)

简介&#xff1a;谷歌浏览器自带的翻译功能&#xff0c;对我们来说用处很大&#xff0c;但有的时候突然就会变成“无法翻译此网页”&#xff0c;之前给大家提供过两种无法翻译此网页的解决方案&#xff0c;这次再给大家分享下两款别的翻译方法&#xff1b; 一、上次介绍&#x…

常用的Windows黑窗口cmd命令

Windows 命令提示符&#xff08;cmd&#xff09;提供了许多命令&#xff0c;用于执行各种系统管理任务、文件操作、网络配置等。以下是一些常用的命令&#xff0c;按照功能进行分类&#xff1a; 1. 文件和目录操作命令&#xff1a; dir&#xff1a;列出当前目录中的文件和子目…

初步学习使用SpringBoot框架(手动插入数据模拟访问数据库)

对于SpringBoot框架介绍大家可以看看这个这篇文章&#xff0c;SpringBoot优缺点以及如何安装使用 以下我是按照老师给的安装方法进行安装使用SpringBoot框架&#xff1a; 大家安装SpringBoot框架时候&#xff0c;最好安装3.0以下的&#xff0c;不然需要对应较高版本的JDK版本&…

TCP/IP详解(一)

TCP/IP协议是Internet互联网最基本的协议&#xff0c;其在一定程度上参考了七层OSI&#xff08;Open System Interconnect&#xff0c;即开放式系统互联&#xff09;模型 OSI参考模型是国际组织ISO在1985年发布的网络互联模型&#xff0c;目的是为了让所有公司使用统一的规范来…

ADB usage

查看手机设备的信息 获取设备的Android版本号 adb shell getprop ro.build.version.release 获取设备的API版本号 adb shell getprop ro.build.version.sdkAdb 获得 sdk版本 adb shell getprop ro.build.version.sdk27 Adb 获得Android版本 adb shell getprop ro.build.vers…

Spring MVC各种参数进行封装

目录 一、简单数据类型 1.1 控制器方法 1.2 测试结果 二、对象类型 2.1 单个对象 2.1.1 控制器方法 2.1.2 测试结果 2.2 关联对象 2.2.1 控制器方法 2.2.2 测试结果 三、集合类型 3.1 简单数据类型集合 3.1.1 控制方法 3.1.2 测试结果 3.2 对象数据类型集合 3.…

linux:docker-compose下载后无法使用

参考&#xff1a; Ubuntu 安装 Docker & Docker-Compose - 知乎 解决方法: PC上下载二进制文件&#xff0c;之后filezilla上传到服务器对应目录

【跑实验05】利用CLIP中的图像编码器,如何遍历文件夹中的图像,将图像文件改为28*28的尺寸,然后输出到excel中的每一列,最后一列全都标记为0

文章目录 一、初步实现二、警告信息的解决三、Excel的限制四、尝试解决 一、初步实现 要遍历文件夹中的图像并将其尺寸调整为28x28&#xff0c;并将结果输出到Excel中&#xff0c;可以按照以下步骤进行操作&#xff1a; 首先&#xff0c;确保您已经安装了Pandas库&#xff0c…

【MySQL 数据库】7、SQL 优化

目录 一、插入数据优化(1) insert 语句① 批量插入数据② 手动控制事务③ 主键顺序插入&#xff0c;性能要高于乱序插入 (2) load 大批量插入数据【☆❀ 二、主键优化(1) 数据组织形式(2) 页分裂(3) 页合并(4) 主键设计原则 三、orber by 优化四、group by 优化五、limit 优化&…

CSDN个性化推荐系统-负反馈测试

文章目录 前言一、uc不感兴趣标签过滤测试1.uc不感兴趣标签获取(uc_unlike_tag_list)1.1个人中心界面1.2从标签中可以发现什么&#xff1f;1.3与研发确认点1.4设计开发1.5接口获取结果 2.推荐流文章标签获取(tag_list)2.1部分代码2.2基本标签校验2.3基本标签校验结果 3.推荐流u…