一、kubernetes 概述:

1. kubernetes 基本介绍

kubernetes,简称 K8s; 是一个开源的, 用于管理云平台中多个主机上的容器化的应用;目标是让部署容器化的应用简单并且高效(powerful);提供了应用部署, 规划, 更新, 维护的一种机制;

1.1 前置知识:

  • Linux操作系统相关操作命令;
  • Docker的使用;

2. K28特性:

  • 自动装箱:
    • 基于容器对应用运行环境的资源配置要求自动部署应用容器;
  • 自我修复(自愈能力):
    • 当容器失败时, 会对容器进行重启;
    • 当所部署的 Node 节点有问题时, 会对容器进行重新部署和重新调度;
    • 当容器未通过监控检查时, 会关闭此容器直到容器正常运行时, 才会对外提供服务;
  • 水平扩展
    • 通过简单的命令、用户 UI 界面或基于 CPU 等资源使用情况, 对应用容器进行规模扩大
      或规模剪裁;
  • 服务发现
    • 用户不需使用额外的服务发现机制, 就能够基于 Kubernetes 自身能力实现服务发现
      负载均衡;
  • 滚动更新:
    • 可以根据应用的变化, 对应用容器运行的应用, 进行一次性或批量式更新;
  • 版本回退:
    • 可以根据应用部署情况, 对应用容器运行的应用,进行历史版本即时回退;
  • 密钥和配置管理:
    • 在不需要重新构建镜像的情况下, 可以部署和更新密钥和应用配置,类似热部署;
  • 存储编排:
    • 自动实现存储系统挂载及应用, 特别对有状态应用实现数据持久化非常重要;
    • 存储系统可以来自于本地目录、网络存储(NFS、Gluster、Ceph 等)、公共云存储服务;
  • 批处理:
    • 提供一次性任务, 定时任务; 满足批量数据处理和分析的场景;

3. k8s的集群架构:

在这里插入图片描述

  • Master Node(主控节点):
    • API server:
      • 集群统一入口, 以restful风格进行api请求, 交给etcd存储;
    • scheduler:
      • 节点调度, 选择节点进行应用部署;
    • conntroller-manager:
      • 处理集群中常规后台业务; 一个资源对应一个控制器;
    • etcd:
      • 用于保存集群的相关数据;
  • Worker Node(工作节点):
    • kubelet:
      • master派到node节点的代表, 管理本机容器;
    • kube-proxy:
      • 维护网络代理功能;
    • docker:
      • pod:
        在这里插入图片描述

4. k8s核心概念:

4.1 pod:

  • 是k8s中的最小部署单元;
  • 是一组容器的集合(一个后多个);
  • 其中的容器时共享网络的;
  • 生命周期的短暂的;

4.2 controller:

  • 确保预期的pod副本数量;
  • 应用部署方式:
    • 有状态应用部署
      • 节点飘移需携带网络等服务状态;
    • 无状态应用部署:
      • 节点飘移不许携带任何服务状态;
  • 确保所有node运行同一个pod;
  • 一次性任务和定时任务;

4.3 service:

  • 定义一组pod的访问规则;

二、集群搭建:

1. 搭建k8s环境平台规划:

1.1 单master节点:

在这里插入图片描述

缺点:

  • master挂掉后, 集群就不能用了

1.2 多master节点:

在这里插入图片描述

1.3 硬件要求:

节点类型cpu内存硬盘
master≥2核≥4G≥20G
worker≥4核≥8G≥40G

2. k8s集群搭建方法–kubeadm:

Kubeadm 是一个 K8s 部署工具, 提供 kubeadm initkubeadm join, 用于快速部
署 Kubernetes 集群;
官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/

2.1 系统配置及初始化:

vm服务器参数

hostiposuser
master1192.168.232.131debian10master1
worker1192.168.232.132debian10worker1
worker2192.168.232.133debian10worker2
  • 集群中所有机器之间网络互通
  • 可以访问外网,需要拉取镜像
  • 禁止 swap 分区
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
setenforce 0  # 临时

# 关闭swap
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久
swapoff -a  # 临时
# 也可参考: https://blog.csdn.net/u013288190/article/details/109028126

# 根据规划设置主机名
hostnamectl set-hostname <hostname>

# 在master添加hosts
cat >> /etc/hosts << EOF
192.168.232.131 k8smaster
192.168.232.132 k8snode1
192.168.232.133 k8snode2
EOF

# 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system  # 生效


# 时间同步
apt install ntpdate -y
ntpdate time.windows.com

2.2 所有节点安装Docker/kubeadm/kubelet

2.2.1 安装docker:

Kubernetes默认CRI()容器运行时)为Docker, 因此先安装Docker;

# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# Step 3: 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce

安装指定版本的Docker-CE:

# Step 1: 查找Docker-CE的版本:
apt-cache madison docker-ce
# Step 2: 安装指定版本的Docker-CE: (VERSION例如上面的18.06.1~ce~3-0~debian)
sudo apt-get -y install docker-ce=[VERSION]

设置自启并检查版本

systemctl enable docker && systemctl start docker
docker --version
# Docker version 18.06.1-ce, build e68fc7a

配置镜像加速器:
可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://yutfeyw9.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
2.2.2 添加阿里云软件源
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 

cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

apt-get update
2.2.3 安装kubeadm,kubelet和kubectl

由于版本更新频繁, 这里指定版本号部署:
ps: 这里装最新版本会有问题(v1.21.0+)

# 可以先使用`apt-cache madison <software_name>`查看可用的包
sudo apt install -y kubelet=1.16.10-00 kubeadm=1.16.10-00 kubectl=1.16.10-00
sudo systemctl enable kubelet

2.3 部署Kubernetes Master:

  • 在192.168.232.131(Master)执行
kubeadm init \
--apiserver-advertise-address=192.168.232.131 \ # 当前节点ip
--image-repository registry.aliyuncs.com/google_containers \	# 镜像仓库
--kubernetes-version v1.16.10 \	# 安装的版本
--service-cidr=10.96.0.0/12 \	# 自连接ip
--pod-network-cidr=10.244.0.0/16 # 自连接ip

由于默认拉取镜像地址 k8s.gcr.io 国内无法访问, 这里指定阿里云镜像仓库地址
在这里插入图片描述

  • 使用 kubectl 工具:
    在安装完成后会提示注册命令:
    在这里插入图片描述
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

kubectl get nodes

在这里插入图片描述

2.4 添加其他节点:

在这里插入图片描述

在其他节点执行命令:

sudo kubeadm join 192.168.232.131:6443 --token hkxtjp.mxxhde8ndnh489p5 --discovery-token-ca-cert-hash sha256:c4a1df9c48bb4d1f774d81710026cf40c20b3474d6416a1ed6cf53f6514e4fd8

worker node:
在这里插入图片描述
master node:
在这里插入图片描述

2.5 安装 Pod 网络插件(CNI):

master:

kubectl apply –f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

确保能够访问到 quay.io 这个 registery; 如果 Pod 镜像下载失败, 可以改这个镜像地址;
在这里插入图片描述
在这里插入图片描述

2.6 环境测试:

在 Kubernetes 集群中创建一个 pod,验证是否正常运行:

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc

在这里插入图片描述
访问地址:http://NodeIP:Port
在这里插入图片描述

3. k8s集群搭建方法–二进制包:

vm服务器参数

hostiposuser
m1192.168.232.137debian10m1
w1192.168.232.136debian10w1
  • 集群中所有机器之间网络互通
  • 可以访问外网,需要拉取镜像
  • 禁止 swap 分区

3.1 操作系统的初始化:

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
setenforce 0  # 临时

# 关闭swap
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久
swapoff -a  # 临时
# 也可参考: https://blog.csdn.net/u013288190/article/details/109028126

# 根据规划设置主机名
hostnamectl set-hostname <hostname>
# 在master添加hosts
cat >> /etc/hosts << EOF
192.168.232.137 k8sm1
192.168.232.136 k8sw1
EOF
# 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system  # 生效

在这里插入图片描述

# 时间同步
sudo apt install ntpdate -y
sudo ntpdate time.windows.com

3.2 为etcd和apiserver自签证书:

3.2.1 准备 cfssl 证书生成工具

cfssl 是一个开源的证书管理工具, 使用 json 文件生成证书, 相比 openssl 更方便使用;
找任意一台服务器操作, 这里用 Master 节点;

wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
chmod +x cfssl_linux-amd64 cfssljson_linux-amd64 cfssl-certinfo_linux-amd64
sudo cp cfssl_linux-amd64 /usr/local/bin/cfssl
sudo cp cfssljson_linux-amd64 /usr/local/bin/cfssljson
sudo cp cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo
4.2.2生成 Etcd 证书
  • 自签证书颁发机构(CA):
    • 创建工作目录:
mkdir -p ~/TLS/{etcd,k8s}
cd  ~/TLS/etcd
  • 自签 CA:
cat > ca-config.json<< EOF
{
    "signing": {
        "default": {
            "expiry": "87600h"
        },
        "profiles": {
            "www": {
                "expiry": "87600h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth",
                    "client auth"
                ]
            }
        }
    }
}
EOF
cat > ca-csr.json<< EOF
{
    "CN": "etcd CA",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "Beijing",
            "ST": "Beijing"
        }
    ]
}
EOF
  • 生成证书:
cfssl gencert -initca ca-csr.json | cfssljson -bare ca
ls

在这里插入图片描述

  • 使用自签 CA 签发 Etcd HTTPS 证书
    • 创建证书申请文件:
cat > server-csr.json<< EOF
{
    "CN": "etcd",
    "hosts": [
        "192.168.232.137",
        "192.168.232.136"
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "BeiJing",
            "ST": "BeiJing"
        }
    ]
}
EOF

ps: 上述文件 hosts 字段中 IP 为所有 etcd 节点的集群内部通信 IP, 一个都不能少! 为了
方便后期扩容可以多写几个预留的 IP;

  • 生成证书:
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server
ls

在这里插入图片描述

3.3 部署etcd集群:

3.3.1 从 Github 下载二进制文件

下载路径: https://github.com/etcd-io/etcd/releases/download/v3.4.9/etcd-v3.4.9-
linux-amd64.tar.gz

3.3.2 部署 Etcd 集群

以下在节点 1 上操作, 为简化操作, 待会将节点 1 生成的所有文件拷贝到节点 2 ;

  • 创建工作目录并解压二进制包:
mkdir /opt/etcd/{bin,cfg,ssl} –p
tar zxvf etcd-v3.4.9-linux-amd64.tar.gz
mv etcd-v3.4.9-linux-amd64/{etcd,etcdctl} /opt/etcd/bin/
  • 创建 etcd 配置文件:
cat > /opt/etcd/cfg/etcd.conf << EOF
#[Member]
ETCD_NAME="etcd-1"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.232.137:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.232.137:2379"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.232.137:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.232.137:2379"
ETCD_INITIAL_CLUSTER="etcd-1=https://192.168.232.137:2380,etcd2=https://192.168.232.136:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new
EOF

参数说明:

参数说明
ETCD_NAME节点名称,集群中唯一
ETCD_DATA_DIR数据目录
ETCD_LISTEN_PEER_URLS集群通信监听地址
ETCD_LISTEN_CLIENT_URLS客户端访问监听地址
ETCD_INITIAL_ADVERTISE_PEER_URLS集群通告地址
ETCD_ADVERTISE_CLIENT_URLS客户端通告地址
ETCD_INITIAL_CLUSTER集群节点地址
ETCD_INITIAL_CLUSTER_TOKEN集群 Token
ETCD_INITIAL_CLUSTER_STATE加入集群的当前状态,new 是新集群,existing 表示加入已有集群
  • systemd 管理 etcd:
cat > /usr/lib/systemd/system/etcd.service << EOF
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
EnvironmentFile=/opt/etcd/cfg/etcd.conf
ExecStart=/opt/etcd/bin/etcd \
--cert-file=/opt/etcd/ssl/server.pem \
--key-file=/opt/etcd/ssl/server-key.pem \
--peer-cert-file=/opt/etcd/ssl/server.pem \
--peer-key-file=/opt/etcd/ssl/server-key.pem \
--trusted-ca-file=/opt/etcd/ssl/ca.pem \
--peer-trusted-ca-file=/opt/etcd/ssl/ca.pem \
--logger=zap
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
  • 拷贝刚才生成的证书
    把刚才生成的证书拷贝到配置文件中的路径:
sudo cp ~/TLS/etcd/ca.pem /opt/etcd/ssl/
sudo cp ~/TLS/etcd/server-key.pem /opt/etcd/ssl/
sudo cp ~/TLS/etcd/server.pem /opt/etcd/ssl/
  • 启动并设置开机启动:
sudo systemctl daemon-reload
sudo systemctl start etcd
sudo systemctl enable etcd
  • 拷贝文件:
    在m1上操作:
scp -r /opt/etcd/ w1@192.168.232.136:/opt/
scp /usr/lib/systemd/system/etcd.service w1@192.168.232.136:/usr/lib/systemd/system/
  • 在节点 2 修改 etcd.conf 配置文件中的节点名称和当前服务器 IP:
nano /opt/etcd/cfg/etcd.conf
#[Member]
ETCD_NAME="etcd-2" # 修改此处,节点 2 改为 etcd-2
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.232.136:2380" # 修改此处为当前服务器 IP
ETCD_LISTEN_CLIENT_URLS="https://192.168.232.136:2379" # 修改此处为当前服务器 IP
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.232.136:2380" # 修改此处为当前
服务器 IP
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.232.136:2379" # 修改此处为当前服务器
IP
ETCD_INITIAL_CLUSTER="etcd-1=https://192.168.232.137:2380,etcd2=https://192.168.232.136:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

启动并设置开机启动:

systemctl daemon-reload
systemctl start etcd
systemctl enable etcd
  • 查看集群状态:
systemctl status etcd.service

3.4 部署master组件:

3.4.1 apiserver自签证书
a. 常见方式:
  • 添加可信任的ip列表(√);
  • 携带ca证书发送请求;
b.生成 kube-apiserver 证书
  • 自签证书颁发机构(CA):
cat > ca-config.json<< EOF
{
    "signing": {
        "default": {
            "expiry": "87600h"
        },
        "profiles": {
            "kubernetes": {
                "expiry": "87600h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth",
                    "client auth"
                ]
            }
        }
    }
}
EOF
cat > ca-csr.json<< EOF
{
    "CN": "kubernetes",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "Beijing",
            "ST": "Beijing",
            "O": "k8s",
            "OU": "System"
        }
    ]
}
EOF
  • 生成证书:
cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
ls

在这里插入图片描述

c. 使用自签 CA 签发 kube-apiserver HTTPS 证书
  • 创建证书申请文件:
cat > server-csr.json<< EOF
{
    "CN": "kubernetes",
    "hosts": [
        "10.0.0.1",
        "127.0.0.1",
        "192.168.232.136",
        "192.168.232.137",
        "192.168.232.135",
        "192.168.232.134",
        "192.168.232.133",
        "192.168.232.138",
        "192.168.232.139",
        "kubernetes",
        "kubernetes.default",
        "kubernetes.default.svc",
        "kubernetes.default.svc.cluster",
        "kubernetes.default.svc.cluster.local"
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "BeiJing",
            "ST": "BeiJing",
            "O": "k8s",
            "OU": "System"
        }
    ]
}
EOF
  • 生成证书:
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes server-csr.json | cfssljson -bare server
ls

在这里插入图片描述
ps:

3.4 2. 从 Github 下载二进制文件

下载地址: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md#v1183
ps: 打开链接你会发现里面有很多包, 下载一个server 包就够了, 包含了Master
Worker Node 二进制文件;

3.4.3 解压二进制包:
sudo mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}
sudo tar -zxvf kubernetes-server-linux-amd64.tar.gz

cd kubernetes/server/bin
cp kube-apiserver kube-scheduler kube-controller-manager /opt/kubernetes/bin
cp kubectl /usr/bin/
3.4.4 部署 kube-apiserver:
a. 创建配置文件
cat > /opt/kubernetes/cfg/kube-apiserver.conf << EOF
KUBE_APISERVER_OPTS="--logtostderr=false \\
--v=2 \\
--log-dir=/opt/kubernetes/logs \\
--etcdservers=https://192.168.232.137:2379,https://192.168.232.136:2379 \\
--bind-address=192.168.232.137 \\
--secure-port=6443 \\
--advertise-address=192.168.232.137 \\
--allow-privileged=true \\
--service-cluster-ip-range=10.0.0.0/24 \\
--enable-admissionplugins=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/kubernetes/ssl/server.pem \\
--kubelet-client-key=/opt/kubernetes/ssl/server-key.pem \\
--tls-cert-file=/opt/kubernetes/ssl/server.pem \\
--tls-private-key-file=/opt/kubernetes/ssl/server-key.pem \\
--client-ca-file=/opt/kubernetes/ssl/ca.pem \\
--service-account-key-file=/opt/kubernetes/ssl/ca-key.pem \\
--etcd-cafile=/opt/etcd/ssl/ca.pem \\
--etcd-certfile=/opt/etcd/ssl/server.pem \\
--etcd-keyfile=/opt/etcd/ssl/server-key.pem \\
--audit-log-maxage=30 \\
--audit-log-maxbackup=3 \\
--audit-log-maxsize=100 \\
--audit-log-path=/opt/kubernetes/logs/k8s-audit.log"
EOF

参数说明:

参数名称说明
–logtostderr启用日志
—v日志等级
–log-dir日志目录
–etcd-serversetcd 集群地址
–bind-address监听地址
–secure-porthttps 安全端口
–advertise-address集群通告地址
–allow-privileged启用授权
–service-cluster-ip-rangeService 虚拟 IP 地址段
–enable-admission-plugins准入控制模块
–authorization-mode认证授权,启用 RBAC 授权和节点自管理
–enable-bootstrap-token-auth启用 TLS bootstrap 机制
–token-auth-filebootstrap token 文件
–service-node-port-rangeService nodeport 类型默认分配端口范围
–kubelet-client-xxxapiserver 访问 kubelet 客户端证书
–tls-xxx-fileapiserver https 证书
–etcd-xxxfile连接 Etcd 集群证书
–audit-log-xxx审计日志
b.拷贝刚才生成的证书:
sudo cp ~/TLS/k8s/ca*pem ~/TLS/k8s/server*pem /opt/kubernetes/ssl/
c. 启用 TLS Bootstrapping 机制:

TLS Bootstraping: Master apiserver 启用 TLS 认证后, Node 节点 kubeletkube- proxy 要与 kube-apiserver 进行通信, 必须使用 CA 签发的有效证书才可以, 当 Node节点很多时, 这种客户端证书颁发需要大量工作, 同样也会增加集群扩展复杂度; 为了简化流程, Kubernetes 引入了 TLS bootstraping 机制来自动颁发客户端证书, kubelet会以一个低权限用户自动向 apiserver 申请证书, kubelet 的证书由 apiserver 动态签署;
TLS bootstraping 工作流程:
在这里插入图片描述
创建上述配置文件中 token 文件:

cat > /opt/kubernetes/cfg/token.csv << EOF
c47ffb939f5ca36231d9e3121a252940,kubelet-bootstrap,10001,"system:nodebootstrapper"
EOF

格式: token,用户名,UID,用户组
token 也可自行生成替换:

head -c 16 /dev/urandom | od -An

在这里插入图片描述###

d. .systemd 管理 apiserver:
cat > /usr/lib/systemd/system/kube-apiserver.service << EOF
[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes
[Service]
EnvironmentFile=/opt/kubernetes/cfg/kube-apiserver.conf
ExecStart=/opt/kubernetes/bin/kube-apiserver \$KUBE_APISERVER_OPTS
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF

启动并设置开机启动:

sudo systemctl daemon-reload
sudo systemctl start kube-apiserver
sudo systemctl enable kube-apiserver

在这里插入图片描述

e. 授权 kubelet-bootstrap 用户允许请求证书:
kubectl create clusterrolebinding kubelet-bootstrap \
--clusterrole=system:node-bootstrapper \
--user=kubelet-bootstrap

3.5 部署worker组件:

3.6 部署集群网络:

手动配置太恶心了!!!不搞了…

4. 两种方式的总结:

4.1 kubeadm搭建集群:

  • 安装虚拟机, 在虚拟机上安装linux系统;
  • 对操作系统进行初始化;
  • 在所有的节点上安装docker, kubeadm, kubelet;
  • 在master节点进行初始化;
  • 部署网络CNI插件;
  • worker节点加入集群;

4.1 二进制搭建集群:

  • 安装虚拟机, 在虚拟机上安装linux系统;
  • 对操作系统进行初始化;
  • 生成cfssl自签证书;
  • 部署etcd集群;
  • 为apiServer生成自签证书;
  • 部署Master Node:
    • 安装k8s Server:
      • apiServer;
      • controller-manager
      • schheduler;
  • 安装worker Node:
    • docker
    • kubelet;
    • kube-proxy;
    • 批准kubelet证书申请并加入集群;
  • 安装CNI网络插件;
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐