怎么知道网站是php,海沧网站建设是否有补助,如何做手机网页,怎么做盗版视频网站目录 一、基本架构和系统初始化
1、集群架构#xff1a;
2、操作系统初始化配置#xff1a;
2.1、关闭防火墙和安全机制#xff1a;
2.2、关闭swap
2.3、根据规划设置主机名
2.4、三台主机全部互相映射
2.5、调整内核参数
3、时间同步#xff08;所有节点时间必须同…目录 一、基本架构和系统初始化
1、集群架构
2、操作系统初始化配置
2.1、关闭防火墙和安全机制
2.2、关闭swap
2.3、根据规划设置主机名
2.4、三台主机全部互相映射
2.5、调整内核参数
3、时间同步所有节点时间必须同步
二、部署 docker引擎
三、部署 etcd 集群
1、准备签发证书环境
2、生成Etcd证书
3、证书复制到node节点
4、启动etcd服务
5、检查etcd群集状态
四、部署 Master 组件
1、二进制文件、token、证书
2、开启 apiserver 服务
3、启动 scheduler 服务
4、启动 controller-manager 服务
5、生成kubectl连接集群的kubeconfig文件
6、通过kubectl工具查看当前集群组件状态
五、部署 Worker Node 组件
1、部署kubelet和proxy 一、基本架构和系统初始化
二进制部署源码包部署
1、集群架构
K8S master0120.0.0.61 kube-apiserver、kube-controller-manager、kube-scheduler、etcd
K8S master0220.0.0.62 kube-apiserver、kube-controller-manager、kube-schedulernode0120.0.0.63 kubelet、kube-proxy、etcd
node0220.0.0.64 kubelet、kube-proxy、etcd负载均衡nginxkeepalivedmaster20.0.0.65
backup20.0.0.66etcd集群
master01 20.0.0.61
node1 20.0.0.63
node2 20.0.0.64 2、操作系统初始化配置
2.1、关闭防火墙和安全机制
systemctl stop firewalld
setenforce 0
iptables -F iptables -t nat -F iptables -t mangle -F iptables -Xiptables -F清除默认的 iptables 规则链如 INPUT、FORWARD、OUTPUT中的所有规则。iptables -t nat -F清除 nat 表中的所有规则这通常包含用于网络地址转换NAT的规则。iptables -t mangle -F清除 mangle 表中的所有规则这通常包含用于修改数据包头部的规则。iptables -X删除用户自定义的链。它将删除你可能在 iptables 中创建的任何自定义链。 2.2、关闭swap
关闭交换分区提升性能
swap交换分区如果机器内存不够就会使用swap交换分区但是swap交换分区的性能较低
k8s设计的时候为了提升性能默认是不允许使用交换分区的。kubeadm初始化的时候会检测swap是否关闭
如果没关闭就会初始化失败。如果不想关闭交换分区
安装k8s的时候可以指定-ignore-preflight-errorsSwap来解决。
swapoff -ased -ri s/.*swap.*/#/ /etc/fstab 2.3、根据规划设置主机名
hostnamectl set-hostname master01
hostnamectl set-hostname node01
hostnamectl set-hostname node02 2.4、三台主机全部互相映射 vim /etc/hosts20.0.0.61 master01
20.0.0.63 node01
20.0.0.64 node02 2.5、调整内核参数
vim /etc/sysctl.d/k8s.conf
#开启网桥模式
net.bridge.bridge-nf-call-ip6tables 1
net.bridge.bridge-nf-call-iptables 1
#网桥的流量传给iptables的链实现地址映射#关闭ipv6的流量可选项看情况
net.ipv6.conf.all.disable_ipv61
#根据工作中的实际情况自定net.ipv4.ip_forward1
#开启转发功能#加载配置
sysctl --system 3、时间同步所有节点时间必须同步
yum install ntpdate -y
ntpdate ntp.aliyun.com 二、部署 docker引擎
所有 node 节点部署docker引擎
yum install -y yum-utils device-mapper-persistent-data lvm2yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum install -y docker-ce docker-ce-cli containerd.iosystemctl start docker.service
systemctl enable docker.service 三、部署 etcd 集群
etcd是一个高可用-分布式键值存储数据库
采用raft算法保证节点的信息一致性。
etcd是基于go语言写的 etcd端口
2379API接口对外为客户端提供通信
2380内部服务的通信端口
etcd 在生产环境中一般推荐集群方式部署。由于etcd 的leader选举机制要求至少为3台或以上的奇数台。
K8S内部通信依靠证书认证秘钥认证 1、准备签发证书环境
相关证书
cfssl证书签发的工具命令
cfssljson将 cfssl 生成的证书json格式变为文件承载式证书
cfssl-certinfo验证证书的信息#查看证书的信息
cfssl-certinfo -cert 证书名称 在 master01 节点上操作
将三个证书文件放到/opt下 mv cfssl cfssl-certinfo cfssljson /usr/local/bin/
chmod 777 /usr/local/bin/cfssl* 2、生成Etcd证书
mkdir /opt/k8scd /opt/k8s/ 上传 etcd-cert.sh 和 etcd.sh 到 /opt/k8s/ 目录中
chmod 777 etcd-cert.sh etcd.sh 脚本详解
etcd配置文件创建:
etcd.sh
在 /opt/etcd/cfg/etcd 路径下创建了一个配置文件用于定义 etcd 节点的各种参数
包括节点名称、数据目录、监听地址等。这个配置文件描述了etcd节点在集群中的角色和通信方式。
etcd服务管理文件创建:
在 /usr/lib/systemd/system/etcd.service 路径下创建了一个 systemd 服务管理文件。
这个文件定义了 etcd 服务的启动方式、环境变量以及其他配置例如 TLS 证书的路径。
启动etcd服务:
使用 systemd 启动了 etcd 服务。systemd 是 Linux 系统的一个服务管理工具它能够启动、停止和管理后台服务。
TLS证书配置:
etcd服务配置中包含了一些关于 TLS传输层安全证书的设置。
TLS用于在网络上安全地传输数据这里的证书用于对集群内和客户端之间的通信进行加密和身份验证。
Flannel兼容性:
有一个注释指出当前版本的 flannel一种网络解决方案不支持 etcd v3 通信。
这表明该脚本可能用于配置 etcd v2 接口以便与 flannel 兼容。
总的来说这个脚本用于设置一个安全的、分布式的 etcd 集群节点
以便在集群中存储和管理键值对数据通常用于分布式系统的配置和协调。 etcd-cert.sh要进去改一下IP地址
CA配置文件 (ca-config.json):
配置了证书生成策略定义了默认过期时间和一个名为 www 的配置模板
该模板具有较长的过期时间和用途包括签名、密钥加密、服务器认证和客户端认证。
CA签名请求文件 (ca-csr.json):
用于生成根证书和私钥的签名请求文件。包括了Common NameCN密钥算法和一些组织信息。
生成根证书和私钥:
使用 cfssl 工具根据配置文件生成根证书 (ca.pem) 和私钥 (ca-key.pem)同时生成签名请求文件 (ca.csr)。
服务器证书签名请求文件 (server-csr.json):
用于生成 etcd 服务器证书和私钥的签名请求文件。包括了Common NameCN主机地址列表密钥算法和一些组织信息。
生成etcd服务器证书和私钥:
使用 cfssl 工具根据根证书对服务器签名请求文件进行签名生成 etcd 服务器证书 (server.pem) 和私钥 (server-key.pem)。 创建用于生成CA证书、etcd 服务器证书以及私钥的目录
mkdir /opt/k8s/etcd-cert
mv etcd-cert.sh etcd-cert/
cd /opt/k8s/etcd-cert/./etcd-cert.sh
#生成CA证书、etcd 服务器证书以及私钥 秘钥、证书
ca-config.json证书颁发机构CA的配置文件定义了证书生成策略包括默认过期时间和用途模板。
ca-csr.json用于生成根证书和私钥的签名请求文件。包括Common NameCN和一些组织信息。
ca.pem根证书文件用于签发其他组件的证书。
ca.csr根证书签发请求文件。
ca-key.pem根证书私钥文件。
server-csr.json用于生成 etcd 服务器证书和私钥的签名请求文件。包括Common NameCN、主机地址列表和一些组织信息。
server.pemetcd 服务器证书文件用于加密和认证 etcd 节点之间的通信。
server.csretcd 服务器证书签发请求文件。
server-key.pemetcd 服务器证书私钥文件。 上传 etcd-v3.4.9-linux-amd64.tar.gz 到 /opt/k8s 目录中启动etcd服务
cd /opt/k8s/tar zxvf etcd-v3.4.9-linux-amd64.tar.gzls etcd-v3.4.9-linux-amd64 文件详解
Documentation文档:
包含文档文件的目录。你可以参考这些文件以获取有关如何使用和配置etcd的信息。
etcd:
主要的etcd二进制文件。这是etcd服务器的可执行文件它是一个分布式键值存储。
etcdctl:
etcd命令行实用程序。这是与etcd集群进行交互的客户端。你可以使用此实用程序在etcd存储中获取、设置和管理键。
README文件:
包含有关etcd、etcdctl和使用指南的各种README文件。这些文件通常包含有关软件的重要信息。
要使用etcd你可以运行etcd二进制文件以启动etcd服务器。此外你可以使用etcdctl二进制文件从命令行与etcd集群进行交互。 创建用于存放 etcd 配置文件命令文件证书的目录
mkdir -p /opt/etcd/{cfg,bin,ssl}cd /opt/k8s/etcd-v3.4.9-linux-amd64/mv etcd etcdctl /opt/etcd/bin/cp /opt/k8s/etcd-cert/*.pem /opt/etcd/ssl/cd /opt/k8s/./etcd.sh etcd01 20.0.0.61 etcd02https://20.0.0.63:2380,etcd03https://20.0.0.64:2380
#进入卡住状态等待其他节点加入这里需要三台etcd服务同时启动如果只启动其中一台后服务会卡在那里直到集群中所有etcd节点都已启动可忽略这个情况#可另外打开一个窗口查看etcd进程是否正常
ps -ef | grep etcd 3、证书复制到node节点
把etcd相关证书文件、命令文件和服务管理文件全部拷贝到另外两个etcd集群节点
scp -r /opt/etcd/ root20.0.0.63:/opt/scp -r /opt/etcd/ root20.0.0.64:/opt/scp /usr/lib/systemd/system/etcd.service root20.0.0.63:/usr/lib/systemd/system/scp /usr/lib/systemd/system/etcd.service root20.0.0.64:/usr/lib/systemd/system/ 在 node01 节点上操作node2同样的操作
vim /opt/etcd/cfg/etcd#[Member]
ETCD_NAMEetcd02 #修改
ETCD_DATA_DIR/var/lib/etcd/default.etcd
ETCD_LISTEN_PEER_URLShttps://192.168.233.93:2380 #修改
ETCD_LISTEN_CLIENT_URLShttps://192.168.233.93:2379 #修改#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLShttps://192.168.233.93:2380 #修改
ETCD_ADVERTISE_CLIENT_URLShttps://192.168.233.93:2379 #修改
ETCD_INITIAL_CLUSTERetcd01https://192.168.233.91:2380,etcd02https://192.168.233.93:2380,etcd03https://192.168.233.94:2380
ETCD_INITIAL_CLUSTER_TOKENetcd-cluster
ETCD_INITIAL_CLUSTER_STATEnew 依次启动etcd谁先启动谁是主先启动master貌似主先启动不了
4、启动etcd服务
systemctl start etcdsystemctl enable etcdsystemctl status etcd 5、检查etcd群集状态
ETCDCTL_API3 /opt/etcd/bin/etcdctl --cacert/opt/etcd/ssl/ca.pem --cert/opt/etcd/ssl/server.pem --key/opt/etcd/ssl/server-key.pem --endpointshttps://20.0.0.61:2379,https://20.0.0.63:2379,https://20.0.0.64:2379 endpoint health --write-outtable --cert-file识别HTTPS端使用SSL证书文件
--key-file使用此SSL密钥文件标识HTTPS客户端
--ca-file使用此CA证书验证启用https的服务器的证书
--endpoints集群中以逗号分隔的机器地址列表
cluster-health检查etcd集群的运行状况 查看etcd集群成员列表
ETCDCTL_API3 /opt/etcd/bin/etcdctl --cacert/opt/etcd/ssl/ca.pem --cert/opt/etcd/ssl/server.pem --key/opt/etcd/ssl/server-key.pem --endpointshttps://20.0.0.61:2379,https://20.0.0.63:2379,https://20.0.0.64:2379 --write-outtable member list ID: 节点的唯一标识符。
STATUS: 节点的状态此处为started表示节点已启动。
NAME: 节点的名称可能是 etcd01、etcd02 或 etcd03。
PEER ADDRS: 节点用于集群通信的对等地址用于节点之间的通信。
CLIENT ADDRS: 节点用于客户端通信的地址用于 etcdctl 等工具与 etcd 通信。
IS LEARNER: 标志指示节点是否是学习者这里的值是 false表示不是学习者。
在 etcd 中学习者Learner是指一个节点不参与 Raft 协议的投票过程仅仅用于复制集群中的数据
而不对集群的一致性达成做出投票。
学习者节点通常用于扩展集群的读取性能因为它们不参与 Raft 的写操作只负责复制数据。 四、部署 Master 组件
1、二进制文件、token、证书
在 master01 节点上操作
#上传 master.zip 和 k8s-cert.sh 到 /opt/k8s 目录中解压 master.zip 压缩包
cd /opt/k8s/unzip master.zipchmod 777 *.sh 现将配置文件中的IP地址改了
vim k8s-cert.sh vim admin.sh vim controller-manager.sh vim scheduler.sh 创建kubernetes工作目录
mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs} 生成CA证书、相关组件的证书和私钥--k8s-cert.sh
创建用于生成CA证书、相关组件的证书和私钥的目录
mkdir /opt/k8s/k8s-cert
mv /opt/k8s/k8s-cert.sh /opt/k8s/k8s-cert
cd /opt/k8s/k8s-cert/./k8s-cert.sh
#生成CA证书、相关组件的证书和私钥 k8s-cert.sh
这个脚本用于生成 Kubernetes 集群中各个组件所需的证书和私钥 复制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/bincp 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/
vim token.sh#!/bin/bash
#获取随机数前16个字节内容以十六进制格式输出并删除其中空格
BOOTSTRAP_TOKEN$(head -c 16 /dev/urandom | od -An -t x | tr -d )
#生成 token.csv 文件按照 Token序列号,用户名,UID,用户组 的格式生成
cat /opt/kubernetes/cfg/token.csv EOF
${BOOTSTRAP_TOKEN},kubelet-bootstrap,10001,system:kubelet-bootstrap
EOFchmod 777 token.sh
./token.sh
cat /opt/kubernetes/cfg/token.csv 二进制文件、token、证书都准备好后
2、开启 apiserver 服务
cd /opt/k8s/./apiserver.sh 20.0.0.61 https://20.0.0.61:2379,https://20.0.0.63:2379,https://20.0.0.64:2379 检查进程是否启动成功
ps aux | grep kube-apiserver netstat -natp | grep 6443
#安全端口6443用于接收HTTPS请求用于基于Token文件或客户端证书等认证 3、启动 scheduler 服务
cd /opt/k8s/./scheduler.shps aux | grep kube-scheduler 4、启动 controller-manager 服务
./controller-manager.shps aux | grep kube-controller-manager 5、生成kubectl连接集群的kubeconfig文件
./admin.sh 6、通过kubectl工具查看当前集群组件状态
kubectl get cs 查看版本信息
kubectl version 五、部署 Worker Node 组件
1、部署kubelet和proxy
在所有 node 节点上操作
#创建kubernetes工作目录
mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs} #上传 node.zip 到 /opt 目录中解压 node.zip 压缩包获得kubelet.sh、proxy.sh
cd /opt/unzip node.zipchmod 777 kubelet.sh proxy.sh 在 master01 节点上操作
#把 kubelet、kube-proxy 拷贝到 node 节点cd /opt/k8s/kubernetes/server/binscp kubelet kube-proxy root20.0.0.63:/opt/kubernetes/bin/scp kubelet kube-proxy root20.0.0.64:/opt/kubernetes/bin/ #上传kubeconfig.sh文件到/opt/k8s/kubeconfig目录中生成kubelet初次加入集群引导kubeconfig文件和kube-proxy.kubeconfig文件
#kubeconfig 文件包含集群参数CA 证书、API Server 地址
客户端参数上面生成的证书和私钥集群 context 上下文参数集群名称、用户名。
Kubenetes 组件如 kubelet、kube-proxy通过启动时指定不同的 kubeconfig 文件可以切换到不同的集群
连接到 apiserver。
#上传kubeconfig.sh文件到/opt/k8s/kubeconfig目录中mkdir /opt/k8s/kubeconfigcd /opt/k8s/kubeconfigchmod 777 kubeconfig.sh./kubeconfig.sh 20.0.0.61 /opt/k8s/k8s-cert/ 把配置文件 bootstrap.kubeconfig、kube-proxy.kubeconfig 拷贝到 node 节点
scp bootstrap.kubeconfig kube-proxy.kubeconfig root20.0.0.63:/opt/kubernetes/cfg/scp bootstrap.kubeconfig kube-proxy.kubeconfig root20.0.0.64:/opt/kubernetes/cfg/ RBAC授权使用户 kubelet-bootstrap 能够有权限发起 CSR 请求证书
kubectl create clusterrolebinding kubelet-bootstrap --clusterrolesystem:node-bootstrapper --userkubelet-bootstrap 若执行失败可先给kubectl绑定默认cluster-admin管理员集群角色授权对整个集群的管理员权限
kubectl create clusterrolebinding cluster-system-anonymous --clusterrolecluster-admin --usersystem:anonymous 在 node01 节点上操作
#启动 kubelet 服务
cd /opt/
./kubelet.sh 20.0.0.63
./kubelet.sh 20.0.0.64ps aux | grep kubelet 在 master01 节点上操作通过 CSR 请求
#检查到 node01 节点的 kubelet 发起的 CSR 请求Pending 表示等待集群给该节点签发证书
kubectl get csr 通过 CSR 请求
kubectl certificate approve node-csr-1C-Qomwben7_ekyyIMfuL6Of9UowclpR_qP4D1ln_K8kubectl certificate approve node-csr-74T8yQ8QKj5y1KOm1GikQIPF9yXvQzWilKI2dM-4kjU
Approved,Issued 表示已授权 CSR 请求并签发证书
kubectl get 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 21 /sbin/modprobe $i;done 启动proxy服务
cd /opt/
./proxy.sh 20.0.0.63
./proxy.sh 20.0.0.64
ps aux | grep kube-proxy 后面的部署接下一篇博客......