K8S之001: 概述、集群搭建
文章目录一、kubernetes 概述:1. kubernetes 基本介绍1.1 前置知识:2. K28特性:3. k8s的集群架构:4. k8s核心概念:4.1 pod:4.2 controller:4.3 service:一、kubernetes 概述:1. kubernetes 基本介绍kubernetes,简称 K8s; 是一个开源的, 用于管理云平台中多个主机上的容器化的应用;目标是让
文章目录
一、kubernetes 概述:
1. kubernetes 基本介绍
kubernetes,简称 K8s; 是一个开源的, 用于管理云平台中多个主机上的容器化的应用;目标是让部署容器化的应用简单并且高效(powerful);提供了应用部署, 规划, 更新, 维护的一种机制;
1.1 前置知识:
- Linux操作系统相关操作命令;
- Docker的使用;
2. K28特性:
- 自动装箱:
- 基于容器对应用运行环境的资源配置要求自动部署应用容器;
- 自我修复(自愈能力):
- 当容器失败时, 会对容器进行重启;
- 当所部署的 Node 节点有问题时, 会对容器进行重新部署和重新调度;
- 当容器未通过监控检查时, 会关闭此容器直到容器正常运行时, 才会对外提供服务;
- 水平扩展
- 通过简单的命令、用户 UI 界面或基于 CPU 等资源使用情况, 对应用容器进行规模扩大
或规模剪裁;
- 通过简单的命令、用户 UI 界面或基于 CPU 等资源使用情况, 对应用容器进行规模扩大
- 服务发现
- 用户不需使用额外的服务发现机制, 就能够基于 Kubernetes 自身能力实现服务发现和
负载均衡;
- 用户不需使用额外的服务发现机制, 就能够基于 Kubernetes 自身能力实现服务发现和
- 滚动更新:
- 可以根据应用的变化, 对应用容器运行的应用, 进行一次性或批量式更新;
- 版本回退:
- 可以根据应用部署情况, 对应用容器运行的应用,进行历史版本即时回退;
- 密钥和配置管理:
- 在不需要重新构建镜像的情况下, 可以部署和更新密钥和应用配置,类似热部署;
- 存储编排:
- 自动实现存储系统挂载及应用, 特别对有状态应用实现数据持久化非常重要;
- 存储系统可以来自于本地目录、网络存储(NFS、Gluster、Ceph 等)、公共云存储服务;
- 批处理:
- 提供一次性任务, 定时任务; 满足批量数据处理和分析的场景;
3. k8s的集群架构:
- Master Node(主控节点):
- API server:
- 集群统一入口, 以restful风格进行api请求, 交给etcd存储;
- scheduler:
- 节点调度, 选择节点进行应用部署;
- conntroller-manager:
- 处理集群中常规后台业务; 一个资源对应一个控制器;
- etcd:
- 用于保存集群的相关数据;
- API server:
- Worker Node(工作节点):
- kubelet:
- master派到node节点的代表, 管理本机容器;
- kube-proxy:
- 维护网络代理功能;
- docker:
- pod:
- pod:
- kubelet:
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 init
和 kubeadm join
, 用于快速部
署 Kubernetes 集群;
官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
2.1 系统配置及初始化:
vm服务器参数
host | ip | os | user |
---|---|---|---|
master1 | 192.168.232.131 | debian10 | master1 |
worker1 | 192.168.232.132 | debian10 | worker1 |
worker2 | 192.168.232.133 | debian10 | worker2 |
- 集群中所有机器之间网络互通
- 可以访问外网,需要拉取镜像
- 禁止 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服务器参数
host | ip | os | user |
---|---|---|---|
m1 | 192.168.232.137 | debian10 | m1 |
w1 | 192.168.232.136 | debian10 | w1 |
- 集群中所有机器之间网络互通
- 可以访问外网,需要拉取镜像
- 禁止 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:
- 可能出现的问题: https://www.fxkjnj.com/?p=2256
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-servers | etcd 集群地址 |
–bind-address | 监听地址 |
–secure-port | https 安全端口 |
–advertise-address | 集群通告地址 |
–allow-privileged | 启用授权 |
–service-cluster-ip-range | Service 虚拟 IP 地址段 |
–enable-admission-plugins | 准入控制模块 |
–authorization-mode | 认证授权,启用 RBAC 授权和节点自管理 |
–enable-bootstrap-token-auth | 启用 TLS bootstrap 机制 |
–token-auth-file | bootstrap token 文件 |
–service-node-port-range | Service nodeport 类型默认分配端口范围 |
–kubelet-client-xxx | apiserver 访问 kubelet 客户端证书 |
–tls-xxx-file | apiserver 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 节点 kubelet
和 kube- 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;
- 安装k8s Server:
- 安装worker Node:
- docker
- kubelet;
- kube-proxy;
- 批准kubelet证书申请并加入集群;
- 安装CNI网络插件;
更多推荐
所有评论(0)