k8s之001:概述集群搭建(代码片段)

浅弋、璃鱼 浅弋、璃鱼     2022-12-13     246

关键词:

文章目录

一、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网络插件;

kubernetes概述和kubeadm方式集群搭建(代码片段)

kubernetes概述和kubeadm方式集群搭建kubernetes概述k8s的功能K8S集群架构组件K8S核心概念集群搭建kubeadm部署方式1.系统初始化2.master和node1,2安装Docker/kubeadm/kubelet3.部署KubernetesMaster4.加入KubernetesNode5.安装Pod网络插件(CNI)6.测试ku... 查看详情

云原生之kubernetes实战在k8s集群下搭建gitlab(代码片段)

【云原生之kubernetes实战】在k8s集群下搭建gitlab一、gitlab介绍1.gitlab简介2.gitlab的特点3.github和gitlab区别二、检查本地k8s集群状态三、安装nfs共享存储1.安装nfs2.创建共享目录3.配置共享目录4.使配置生效5.重启nfs相关服务①设置nfs服... 查看详情

k8s之认证,授权及准入控制(代码片段)

第1章访问认证的概述1.1概念的引入APIServer作为Kubernetes集群系统的网关,是访问及管理资源对象的唯一人口,余下所有需要访问集群资源的组件,包括kube-controller-manager、kube-scheduler、kubelet和kube-proxy等集群基础组件、CoreDNS等集群... 查看详情

docker私有仓库部署之compose搭建consul集群(代码片段)

文章目录一、DockerCompose简介1.1DockerCompose概述1.2DockerCompose容器编排1.3DockerCompose常用命令1.4DockerCompose配置常用字段二、Consul简介2.1consul概述2.2Consul容器服务更新与发现三、部署Compose3.1安装docker、设置镜像加速3.2compose部署四、consu... 查看详情

基于kubeadmin搭建k8s集群(代码片段)

...、前言在上一篇,我们基于minikube搭建了一个单节点的k8s集群,作为学习和练习使用的话问题不大,但如果想深入学习和了解k8s的相关技术体系,还是需要搭建真正的集群才能更接近生产环境的应用,本篇将基于KubeAdmin,也是官... 查看详情

linux企业运维——k8s高可用集群架构搭建详解(代码片段)

K8s高可用集群文章目录K8s高可用集群一、K8s高可用集群架构原理二、实验环境三、K8s高可用集群架构搭建3.1、负载均衡Loadbalancer部署—haproxy3.2、Docker部署3.3、K8s集群部署3.4、K8s集群添加worker节点四、集群高可用性能测试一、K8s... 查看详情

linux企业运维——k8s高可用集群架构搭建详解(代码片段)

K8s高可用集群文章目录K8s高可用集群一、K8s高可用集群架构原理二、实验环境三、K8s高可用集群架构搭建1、负载均衡Loadbalancer部署—haproxy2、Docker部署3、K8s集群部署4、K8s集群添加worker节点四、集群高可用性能测试一、K8s高可用... 查看详情

k8s集群搭建(代码片段)

集群规划mastercentos72U3G30G192.168.188.130node01centos72U3G30G192.168.188.131node02centos72U3G30G192.168.188.132备注:以下操作18在所有节点执行,910在master节点执行,11~12在node节点执行最后的测试在master节点执行1.关闭防火墙systemctlstopfirewalld 查看详情

k8s集群搭建(代码片段)

kubeadmkubeadm是官方社区推出的一个用快速部署kubernetes集群的工具。创建一个Master节点kubeadminit将一个Node节点加入到当前集群中kubeadmjoin<Master节点的IP和端口>环境要求一台或多台服务器,基础配置:2GB以上,2个CPU... 查看详情

k8s简单集群搭建(代码片段)

...前,您应该要对k8s的组件有一些了解,我就不描述组件在集群中所担任的角色了,如有需要请移步官网或其他博客。并且没有使用到证书1环境准备1.1基本环境操作系统CentOSLinuxrelease7.4.1708(Core)软件版本Kubernetesv1.9.1(后面提供tar包... 查看详情

k8s之pod(代码片段)

k8s之Pod一、概述在Kubrenetes集群中Pod有如下两种使用方式pause容器使得Pod中的所有容器可以共享两种资源:网络和存储。二、Pod分类1.自主式Pod2.控制器管理的Podkubernetes中的pause容器主要为每个业务容器提供以下功能:·Kubernetes设计这... 查看详情

k8s之pod(代码片段)

k8s之Pod一、概述在Kubrenetes集群中Pod有如下两种使用方式pause容器使得Pod中的所有容器可以共享两种资源:网络和存储。二、Pod分类1.自主式Pod2.控制器管理的Podkubernetes中的pause容器主要为每个业务容器提供以下功能:·Kubernetes设计这... 查看详情

kubernetes集群搭建总结(代码片段)

1、安装kubelet、kubeadm、kubectl2、查看所需镜像命令:kubeadmconfigimageslist结果:k8s.gcr.io/kube-apiserver:v1.18.3k8s.gcr.io/kube-controller-manager:v1.18.3k8s.gcr.io/kube-scheduler:v1.18.3k8s.gcr.io/kube-proxy:v1.18. 查看详情

ubuntu通过kubeadm快速搭建k8s集群(代码片段)

前言本文是在Ubuntu18.04LTS系统上通过kubeadm快速搭建k8s集群,系统使用虚拟机安装,首先安装一台虚拟机(master节点),然后进行环境初始化配置,配置完成后直接克隆出两台工作节点。环境准备k8s集群角色服务IP主机名控制节点1... 查看详情

2二进制方式搭建k8s集群(代码片段)

本文介绍单/多Master的K8S集群搭建全过程。 目录1环境要求、节点规划、配置1.1环境要求1.2节点规划1.3操作系统初始化配置2ETCD集群部署2.1 准备cfssl证书生成工具2.2 生成ETCD证书2.3下载ETCD的二进制文件2.4部署ETCD集群3安装Docker4部... 查看详情

k8s三k8s集群的初始化(代码片段)

...dmkubeletkubectl安装kubeadmmaster节点初始化node节点初始化加入集群集群网络初始化之flannel报错kubeadminit报错kubectlgetnodes报错总结写在后面前言通过前面两篇文章的铺垫,【k8s】一、基础实验环境准备【k8s】二、containerd的安装我们... 查看详情

手把手从零开始搭建k8s集群超详细教程(代码片段)

...一课K8s+Docker+KubeSphere+DevOps同步所做笔记教程k8s集群搭建超详细教程1.基本环境搭建1.创建私有网络2.创建服务器资源3.远程连接到服务器4.docker容器化环境安装5.kubeadm、kubectl、kubelet安装2.使用kubeadm引导集群1.下载k8s所需的... 查看详情

手把手从零开始搭建k8s集群超详细教程(代码片段)

...一课K8s+Docker+KubeSphere+DevOps同步所做笔记教程k8s集群搭建超详细教程1.基本环境搭建1.创建私有网络2.创建服务器资源3.远程连接到服务器4.docker容器化环境安装5.kubeadm、kubectl、kubelet安装2.使用kubeadm引导集群1.下载k8s所需的... 查看详情