1 硬件要求
1.1 测试环境
- master:2核 4G 20G
- master:4核 8G 40G
1.2 生产环境
配置要求更高
2 搭建方式
- kubeadm:部署工具,提供
kubeadm init
和kubeadm join
,用于快速部署k8s集群- 门槛低,屏蔽了很多细节,遇到问题很难排查
- 二进制包:下载发行包,手动部署每个组件,组成k8s集群。
- 手动部署,过程麻烦,但是利于后期维护
3 kubeadm方式搭建(推荐)
// 1 对所有服务器进行初始化操作
// 1.1 关闭防火墙
sys
// 注意,必须开放的端口6443 10250
firewall-cmd --zone=public --add-port=6443/tcp --permanent
firewall-cmd --zone=public --add-port=10250/tcp --permanent
// 1.2 关闭selinux
// 1.3 关闭swap分区
// 1.4 设置主机名称
hostnamectl set-hostname 主机名
// 1.5 在master添加host
vim /etv/hosts
ip1 主机名1
ip2 主机名2
ip3 主机名3
// 1.6 将桥接的ipv4流量拆改地道iptables的链
// 1.7 时间同步(更新到最新)
// 2 安装docker
// 3 安装kubeadm,kubelet,kubectl
// 3.1 设置yum源 vim /
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
// 3.2 安装kubelet
yum install -y kubelet
// 3.3 安装kubeadm
yum install -y kubeadm
// 3.4 安装kubectl
yum install -y kubectl
// 4 部署master节点
// 4.1 在master节点执行
kubeadm init \
--apiserver-advertise-address=本机ip \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.1(当前版本) \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
// 4.2 查看nodes
kubectl get nodes
// 5 加入node节点
// 5.1 在node节点执行
kubeadm join 节点ip \
--token=[token] \
--discovery-token-ca-cert-hash [hash值]
// 5.2 查看nodes
kubectl get nodes
// 6 配置CNI网络插件
// 7 最后测试检验集群部署的正确性
4 kubectl方式手动搭建(重要)
4.1 所有机器进行初始化操作
// 1 关闭防火墙 --可以不关
// 1.1 临时关闭
systemctl stop firewall
// 1.2 永久关闭
systemctl disable firewall
// 1.3 注意,必须开放的端口2379
firewall-cmd --zone=public --add-port=2379/tcp --permanent
firewall-cmd --reload
// 2 关闭selinux --可以不关
// 2.1 临时关闭
setenforce 0
// 2.2 永久关闭
// sed 直接对文本文件进行操作 sed -i 's/原字符串/新字符串' 目标文件
sed -i 's/enforcing/disabled' /etc/selinux/config
// 3 关闭swap分区 --必须
// 3.1 临时关闭
swapoff -a
// 3.2 永久关闭
// sed 直接对文本文件进行操作 sed -i 's/原字符串/新字符串' 目标文件
sed -ri 's/.*swap.*/#&/' /etc/fstab
// 4 修改hostname
// 4.1 设置hostname
hostnamectl set-hostname 主机名
// 4.2 查询hostname
hostname
// 5 修改host
vim /etc/hosts;
// 5.1 添加如下内容
192.168.203.166 master
192.168.203.167 node-167
192.168.203.168 node-168
// 5.2 相互ping,测试是否设置成功
// 6 将桥接的IPv4流量传递到iptables的链 ****本次学习未设置****
vim /etc/sysctl.d/k8s.conf;
// 6.1 添加如下内容
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
// 6.2 使其生效
sysctl --system
4.2 部署etcd集群
4.2.1 准备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*
4.2.2 生成Etcd
证书
// 1 创建CA配置文件ca-config.json
vim /opt/ssl/k8sca/ca-config.json
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"www": {
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
],
"expiry": "87600h"
}
}
}
}
// 2 创建CA证书签名请求ca-csr.json
vim /opt/ssl/k8sca/ca-csr.json
{
"CN": "etcd CA",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [{
"C": "CN",
"L": "GuangDong",
"ST": "ShenZhen"
}]
}
// 3 生成ca证书和私钥(生成ca.csr、ca-key.pem、ca.pem)
cfssl gencert -initca ca-csr.json | cfssljson -bare ca
// 4 创建etcd证书申请文件server-csr.json
{
"CN": "etcd",
"hosts": [
"192.168.203.166",
"192.168.203.167",
"192.168.203.168"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [{
"C": "CN",
"L": "GuangDong",
"ST": "ShenZhen"
}]
}
// 5 使用自签CA生成etcd 的https证书和私钥
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server
4.2.3 部署etcd集群
// master主机
// 1 下载etcd
wget https://storage.googleapis.com/etcd/v3.5.1/etcd-v3.5.1-linux-amd64.tar.gz
// 2 解压安装etcd
tar xzvf ./etcd-v3.5.1-linux-amd64.tar.gz -C ./etcd --strip-components=1
// 3 创建软链接
ln -s ./etcd /usr/local/bin/etcd
ln -s ./etcdctl /usr/local/bin/etcdctl
// 4 验证安装
etcd --version
// 5 设置配置文件etcd.conf
vim /usr/local/etcd/etcd.conf
#[Member]
# 节点名称,集群中唯一
ETCD_NAME="etcd-1"
# 数据目录
ETCD_DATA_DIR="/usr/local/etcd/default.etcd"
# 集群通信监听地址
ETCD_LISTEN_PEER_URLS="https://192.168.203.166:2380"
# 客户端访问监听地址
ETCD_LISTEN_CLIENT_URLS="https://192.168.203.166:2379"
#[Clustering]
# 集群通告地址
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.203.166:2380"
# 客户端通告地址
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.203.166:2379"
# 集群节点地址
ETCD_INITIAL_CLUSTER="etcd-1=https://192.168.203.166:2380,etcd-2=https://192.168.203.167:2380,etcd-3=https://192.168.203.168:2380"
# 集群 Token
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
# 加入集群的当前状态,new 是新集群,existing 表示加入 已有集群
ETCD_INITIAL_CLUSTER_STATE="new"
// 6 设置服务etcd.service
vim /usr/lib/systemd/system/etcd.service
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
EnvironmentFile=/usr/local/etcd/etcd.conf
ExecStart=etcd \
# 证书配置
--cert-file=/opt/ssl/etcd/server.pem \
--key-file=/opt/ssl/etcd/server-key.pem \
--peer-cert-file=/opt/ssl/etcd/server.pem \
--peer-key-file=/opt/ssl/etcd/server-key.pem \
--trusted-ca-file=/opt/ssl/etcd/ca.pem \
--peer-trusted-ca-file=/opt/ssl/etcd/ca.pem \
--logger=zap
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
// 7 拷贝上一步生成的证书到指定目录
cp /opt/ssl/k8sca/{ca,server,server-key}.pem /opt/ssl/etcd/
// 8 启动并设置开机启动
systemctl daemon-reload
systemctl start etcd
systemctl enable etcd
4.2.4 部署etcd集群
// 1 将上面节点 1 所有生成的文件拷贝到其他节点
scp -r /usr/loca/etcd/ root@其他节点IP:/usr/local/
scp /usr/lib/systemd/system/etcd.service root@192.168.31.72:/usr/lib/systemd/system/
// 2 然后在节点 2 和节点 3 分别修改 etcd.conf 配置文件中的节点名称和当前服务器 IP
ETCD_NAME="etcd-1" # 修改此处,节点 2 改为 etcd-2,节点 3 改为 etcd-3
ETCD_LISTEN_PEER_URLS="https://192.168.31.71:2380" # 修改此处为当前服务器 IP
ETCD_LISTEN_CLIENT_URLS="https://192.168.31.71:2379" # 修改此处为当前服务器 IP
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.31.71:2380" # 修改此处为当前 服务器 IP
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.31.71:2379" # 修改此处为当前服务器 IP
// 3 最后启动 etcd 并设置开机启动,同上。
// 4 查看集群状态
ETCDCTL_API=3 etcdctl \
--cacert=/opt/ssl/etcd/ca.pem \
--cert=/opt/ssl/etcd/server.pem \
--key=/opt/ssl/etcd/server-key.pem \
--endpoints="https://192.168.203.166:2379,https://192.168.203.167:2379,https://192.168.203.168:2379" \
endpoint health
4.3 部署Master Node
主要工作:
- 部署API server
- 部署scheduler
- 部署controller-manager
4.3.1 为apiserver自签证书
// 1 创建CA配置文件ca-config.json
vim /opt/ssl/k8s/ca-config.json
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"www": {
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
],
"expiry": "87600h"
}
}
}
}
// 2 创建CA证书签名请求ca-csr.json
vim /opt/ssl/k8s/ca-csr.json
{
"CN": "kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [{
"C": "CN",
"L": "GuangDong",
"ST": "ShenZhen",
"O": "k8s",
"OU": "System"
}]
}
// 3 生成ca证书和私钥
cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
// 4 创建kubernetes证书申请文件kubernetes-csr.json
// 注意:可信任ip列表在此处添加hosts
vim /opt/ssl/k8s/kubernetes-csr.json
{
"CN": "kubernetes",
"hosts": [
"10.0.0.1",
"127.0.0.1",
"kubernetes",
"kubernetes.default",
"kubernetes.default.svc",
"kubernetes.default.svc.cluster",
"kubernetes.default.svc.cluster.local",
"192.168.203.166",
"192.168.203.167",
"192.168.203.168",
"192.168.203.2"
],
"key": { "algo": "rsa", "size": 2048 },
"names": [
{ "C": "CN", "L": "GuangDong", "ST": "ShenZhen", "O": "k8s", "OU": "System" }
]
}
// 5 使用自签CA生成etcd 的https证书和私钥
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www kubernetes-csr.json | cfssljson -bare server
4.3.2 部署 kube-apiserver
// 1 下载kubernetes-server二进制包(下载地址在本文最下端)
// 注意:此教程不支持1.19以上的版本
tar zxvf kubernetes-server-linux-amd64.tar.gz
cp ./kubernetes/server/bin/{kube-apiserver,kube-scheduler,kube-controller-manager} /usr/local/bin
// 2 部署 kube-apiserver
// 2.1 创建配置文件
vim /opt/kubernetes/kube-apiserver.conf
KUBE_APISERVER_OPTS="--logtostderr=false \\
--v=2 \\
--log-dir=/opt/kubernetes/logs \\
--etcd-servers=https://192.168.203.166:2379,https://192.168.203.167:2379,https://192.168.203.168:2379 \\
--bind-address=192.168.203.166 \\
--secure-port=6443 \\
--advertise-address=192.168.203.166 \\
--allow-privileged=true \\
--service-cluster-ip-range=10.0.0.0/24 \\
--enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,NodeRestriction \\
--authorization-mode=RBAC,Node \\
--enable-bootstrap-token-auth=true \\
--token-auth-file=/opt/kubernetes/cfg/token.csv \\
--service-node-port-range=30000-32767 \\
--kubelet-client-certificate=/opt/ssl/k8s/server.pem \\
--kubelet-client-key=/opt/ssl/k8s/server-key.pem \\
--tls-cert-file=/opt/ssl/k8s/server.pem \\
--tls-private-key-file=/opt/ssl/k8s/server-key.pem \\
--client-ca-file=/opt/ssl/k8s/ca.pem \\
--service-account-key-file=/opt/ssl/k8s/ca-key.pem \\
--etcd-cafile=/opt/ssl/etcd/ca.pem \\
--etcd-certfile=/opt/ssl/etcd/server.pem \\
--etcd-keyfile=/opt/ssl/etcd/server-key.pem \\
--audit-log-maxage=30 \\
--audit-log-maxbackup=3 \\
--audit-log-maxsize=100 \\
--audit-log-path=/opt/kubernetes/logs/k8s-audit.log"
// 2.2 启用 TLS Bootstrapping 机制
vim /opt/kubernetes/cfg/token.csv
c47ffb939f5ca36231d9e3121a252940,kubelet-bootstrap,10001,"system:node- bootstrapper"
// 3 systemd 管理 apiserver
vim /usr/lib/systemd/system/kube-apiserver.service
[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes
[Service]
EnvironmentFile=/opt/kubernetes/cfg/kube-apiserver.conf
ExecStart=kube-apiserver $KUBE_APISERVER_OPTS
Restart=on-failure
[Install]
WantedBy=multi-user.target
// 4 启动并设置开机启动
systemctl daemon-reload
systemctl start kube-apiserver
systemctl enable kube-apiserver
systemctl status kube-apiserver
// 查错
cat /var/log/messages|grep kube-apiserver
// 5 授权 kubelet-bootstrap 用户允许请求证书
kubectl create clusterrolebinding kubelet-bootstrap \
--clusterrole=system:node-bootstrapper \
--user=kubelet-bootstrap
4.3.3 部署 kube-controller-manager
// 1 创建配置文件
vim /opt/kubernetes/kube-controller-manager.conf
KUBE_CONTROLLER_MANAGER_OPTS="--logtostderr=false \\
--v=2 \\
--log-dir=/opt/kubernetes/logs \\
--leader-elect=true \\
--master=127.0.0.1:8080 \\
--bind-address=127.0.0.1 \\
--allocate-node-cidrs=true \\
--cluster-cidr=10.244.0.0/16 \\
--service-cluster-ip-range=10.0.0.0/24 \\
--cluster-signing-cert-file=/opt/ssl/kubernetes/ca.pem \\
--cluster-signing-key-file=/opt/ssl/kubernetes/ca-key.pem \\
--root-ca-file=/opt/ssl/kubernetes/ca.pem \\
--service-account-private-key-file=/opt/ssl/kubernetes/ca-key.pem \\
--experimental-cluster-signing-duration=87600h0m0s"
// 2 systemd 管理kube-controller-manager
vim /usr/lib/systemd/system/kube-controller-manager.service
[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/kubernetes/kubernetes
[Service]
EnvironmentFile=/opt/kubernetes/cfg/kube-controller-manager.conf
ExecStart=kube-controller-manager $KUBE_CONTROLLER_MANAGER_OPTS
Restart=on-failure
[Install]
WantedBy=multi-user.target
// 3 启动并设置开机启动
systemctl daemon-reload
systemctl start kube-controller-manager
systemctl enable kube-controller-manager
systemctl status kube-controller-manager
4.3.4 部署 kube-scheduler
// 1 创建配置文件
vim /opt/kubernetes/kube-scheduler.conf
KUBE_SCHEDULER_OPTS="--logtostderr=false \\
--v=2 \\
--log-dir=/opt/kubernetes/logs \\
--leader-elect \\
--master=127.0.0.1:8080 \\
--bind-address=127.0.0.1"
// 2 systemd 管理kube-scheduler
vim /usr/lib/systemd/system/kube-scheduler.service
[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/kubernetes/kubernetes
[Service]
EnvironmentFile=/opt/kubernetes/cfg/kube-scheduler.conf
ExecStart=kube-scheduler $KUBE_SCHEDULER_OPTS
Restart=on-failure
[Install]
WantedBy=multi-user.target
// 3 启动并设置开机启动
systemctl daemon-reload
systemctl start kube-scheduler.service
systemctl enable kube-scheduler.service
systemctl status kube-scheduler.service
4.3.5 查看集群状态
kubectl get cs
4.4 部署Worker Node
主要工作:
- 部署kubelet
- 部署kube-proxy
4.4.1 部署 kubelet
// 1 创建配置文件
vim /opt/kubernetes/cfg/kubelet.conf
# –hostname-override:显示名称,集群中唯一
# –network-plugin:启用 CNI –kubeconfig:空路径,会自动生成,后面用于连接 apiserver
# –bootstrap-kubeconfig:首次启动向 apiserver 申请证书
# –config:配置参数文件
# –cert-dir:kubelet 证书生成目录
# –pod-infra-container-image:管理 Pod 网络容器的镜像
KUBELET_OPTS="--logtostderr=false \
--v=2 \
--log-dir=/opt/kubernetes/logs \
--hostname-override=k8s-master \
--network-plugin=cni \
--kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig \
--bootstrap-kubeconfig=/opt/kubernetes/cfg/bootstrap.kubeconfig \
--config=/opt/kubernetes/cfg/kubelet-config.yml \
--cert-dir=/opt/kubernetes/ssl \
--pod-infra-container-image=lizhenliang/pause-amd64:3.0"
// 2 配置参数文件
vim /opt/kubernetes/cfg/kubelet-config.yml
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
address: 0.0.0.0
port: 10250
readOnlyPort: 10255
cgroupDriver: cgroupfs
clusterDNS:
- 10.0.0.2
clusterDomain: cluster.local
failSwapOn: false
authentication:
anonymous:
enabled: false
webhook:
cacheTTL: 2m0s
enabled: true
x509:
clientCAFile: /opt/ssl/k8s/ca.pem
authorization:
mode: Webhook
webhook:
cacheAuthorizedTTL: 5m0s
cacheUnauthorizedTTL: 30s
evictionHard:
imagefs.available: 15%
memory.available: 100Mi
nodefs.available: 10%
nodefs.inodesFree: 5%
maxOpenFiles: 1000000
maxPods: 110
// 3 生成 bootstrap.kubeconfig 文件
vim /opt/kubernetes/cfg/bootstrap.kubeconfig
KUBE_APISERVER="https://192.168.203.166:6443" # apiserver IP:PORT
TOKEN="c47ffb939f5ca36231d9e3121a252940" # 与 token.csv 里保持一致
# 生成 kubelet bootstrap kubeconfig 配置文件
kubectl config set-cluster kubernetes \
--certificate-authority=/opt/kubernetes/ssl/ca.pem \
--embed-certs=true \
--server=${KUBE_APISERVER} \
--kubeconfig=bootstrap.kubeconfig
kubectl config set-credentials "kubelet-bootstrap" \
--token=${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
// 4 systemd 管理 kubelet
systemctl daemon-reload
systemctl start kubelet
systemctl enable kubelet
5 使用官网推荐搭建
5.1 安装 kubeadm
5.1.1 允许 iptables 检查桥接流量
// 1 查询br_netfilter是否被加载
lsmod | grep br_netfilter
// 2 如果未加载,执行如下命令
// 2.1 临时启动
sudo modprobe br_netfilter
// 2.2 设置开机启动
vi /etc/modules-load.d/k8s.conf
br_netfilter
// 3 为了让Linux节点的iptables能够正确地查看桥接流量,需要将sysctl配置中net.bridge.bridge-nf-call-iptables设置为1
vi /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
// 3.1 使其生效
sudo sysctl --system
5.1.2 检查所需端口
5.1.3 安装运行容器docker
5.1.4 安装 kubeadm、kubelet 和 kubectl
//1 设置yum源
vi /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
// 2 将 SELinux 设置为 permissive 模式(相当于将其禁用)
// 2.1 临时关闭
sudo setenforce 0
// 2.2 永久关闭
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
// 3 安装
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
// 4 激活并启动 kubelet
sudo systemctl enable --now kubelet
5.1.4 配置 cgroup 驱动程序
容器运行时和 kubelet 都具有名字为 “cgroup driver” 的属性,该属性对于在 Linux 机器上管理 CGroups 而言非常重要。
警告: 你需要确保容器运行时和 kubelet 所使用的是相同的 cgroup 驱动,否则 kubelet 进程会失败。 相关细节可参见配置 cgroup 驱动。
// 1 配置容器运行时 cgroup 驱动(docker)
mkdir /etc/docker
vi /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker
// 2 配置 kubelet 的 cgroup 驱动
5.2 使用 kubeadm 创建集群
5.2.1 初始化(kubeadm init)
// 1 关闭swap分区
// 1.1 临时关闭
swapoff -a
// 1.2 永久关闭
// sed 直接对文本文件进行操作 sed -i 's/原字符串/新字符串' 目标文件
sed -ri 's/.*swap.*/#&/' /etc/fstab
// 2 开启6443和10250端口
firewall-cmd --zone=public --add-port=6443/tcp --permanent
firewall-cmd --zone=public --add-port=10250/tcp --permanent
firewall-cmd --reload
// 3 初始化集群
kubeadm init \
--apiserver-advertise-address=本机ip \
--image-repository registry.aliyuncs.com/google_containers \
--pod-network-cidr=10.244.0.0/16
5.2.2 配置网络插件
mkdir -p /etc/cni/net.d
vim ptp.confist
{
"cniVersion": "0.3.1",
"name": "mynet",
"plugins": [
{
"type": "ptp",
"ipMasq": true,
"ipam": {
"type": "host-local",
"subnet": "172.16.30.0/24",
"routes": [
{
"dst": "0.0.0.0/0"
}
]
}
},
{
"type": "portmap",
"capabilities": {"portMappings": true},
"externalSetMarkChain": "KUBE-MARK-MASQ"
}
]
}
5.2.3 节点加入集群(kubeadm join)
// 1 配置网络
// 2 安装docker,复制deamon.json
// 3 安装 kubeadm、kubelet 和 kubectl
// 4 加入集群
kubeadm join ip:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
// 5 开启10248端口
firewall-cmd --zone=public --add-port=10248/tcp --permanent
firewall-cmd --reload
// 6 配置网络插件同5.2.2