Kubernetes集群二进制部署(二)——单master集群

本文详细介绍了如何通过二进制方式部署一个Kubernetes单master集群,包括master组件如api-server、scheduler和controller-manager的配置与启动,以及node节点的kubelet和kube-proxy的部署,确保节点健康加入集群。

一、环境及软件包

接博客:Kubernetes集群二进制部署(一)——Etcd数据库群集功能部署、flannel网络组建

节点规划

服务器 IP 安装软件
Master01 192.168.11.11 kube-apiserver、kube-controller-manager、kube-scheduler、etcd
Master02 192.168.11.12 kube-apiserver、kube-controller-manager、kube-scheduler
负载均衡LB01 192.168.11.13 nginx、keepalived
负载均衡LB02 192.168.11.14 nginx、keepalived
Node01 192.168.11.16 kubelet、kube-proxy、docker 、flannel 、etcd
Node02 192.168.11.17 kubelet、kube-proxy、docker 、flannel 、etcd

二、部署master组件

master节点负责为用户和客户端暴露API、追踪集群节点的健康状态、调度工作负载、以及编排其他组件之间的通信等。

master主要组件:

① Kube-apiserver

② Kube-controller-manager

③ kube-scheduler

配置文件——>systemctl管理组件——>启动

以下mastr组件部署均在在master节点上操作

1、api-server

1) api-server生成证书

#将脚本拷贝至k8s目录中,解压(脚本先前已编写好)

[root@master k8s]# unzip master.zip

解压后有三个脚本,后面会用到,注意:三个脚本都要有执行权限
在这里插入图片描述

① 创建/opt/k8s/工作目录(cfg配置文件目录,bin命令文件目录,ssl证书文件目录)

[root@master k8s]# mkdir -p /opt/kubernetes/{cfg,ssl,bin}

② 制作api-server证书

#创建k8s证书目录

[root@master k8s]# mkdir k8s-cert
[root@master k8s]# cd k8s-cert/

#编写生成证书脚本

[root@master k8s-cert]# vim k8s-cert.sh 
#生成ca证书的配置文件
cat > ca-config.json <<EOF
{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "kubernetes": {
         "expiry": "87600h",
         "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ]
      }
    }
  }
}
EOF

#生成ca签名文件
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 -

#生成apiserver服务端的签名证书
#注意:master02节点和LB节点的IP地址是为了部署之后的多master集群
cat > server-csr.json <<EOF
{
    "CN": "kubernetes",
    "hosts": [
      "10.0.0.1",
      "127.0.0.1",
      "192.168.11.11",    #master01节点
      "192.168.11.12",    #master02节点
      "192.168.11.100",   #VIP地址
      "192.168.11.13",    #负载调度器(master节点)
      "192.168.11.14",    #负载调度器(backup节点)
      "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

#生成服务器管理员证书
cat > admin-csr.json <<EOF
{
  "CN": "admin",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "L": "BeiJing",
      "ST": "BeiJing",
      "O": "system:masters",
      "OU": "System"
    }
  ]
}
EOF

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin

# 生成kube-proxy 代理端证书
cat > kube-proxy-csr.json <<EOF
{
  "CN": "system:kube-proxy",
  "hosts": [],
  "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 kube-proxy-csr.json | cfssljson -bare kube-proxy

#执行脚本

[root@master k8s-cert]# bash k8s-cert.sh 

一共生成8个证书。ca、server服务端、管理员、proxy 代理端各2个证书
在这里插入图片描述

#将ca证书及server证书复制到ssl证书文件目录中

[root@master k8s-cert]# cp ca*pem server*pem /opt/kubernetes/ssl/
2)解压k8s服务器端压缩包

#解压服务器端kubernetes软件包,会生成很多组件

[root@master k8s]# tar zxvf kubernetes-server-linux-amd64.tar.gz

#解压后包含服务端及客户端所需要的命令及组件

### Kubernetes 1.26 多 Master 集群二进制部署指南 在 Kubernetes 1.26 中,使用二进制方式部署Master 集群是一种较为底层但灵活性更高的方法。该部署方式要求手动配置所有组件,包括 kube-apiserver、kube-controller-manager、kube-scheduler、etcd、kubelet 和 kube-proxy 等。 #### 基础环境准备 - **操作系统**:建议使用 Ubuntu 或 CentOS,确保所有节点之间网络互通。 - **硬件要求**:每个 Master 节点至少需要 2 核 CPU 和 4GB 内存。 - **时间同步**:使用 `chronyd` 或 `ntpd` 同步所有节点的时间。 - **主机名解析**:在 `/etc/hosts` 文件中配置所有节点的 IP 地址和主机名映射。 - **禁用交换分区**:通过 `swapoff -a` 禁用交换分区,并在 `/etc/fstab` 中注释掉 swap 挂载项。 #### 安装依赖包 在所有节点上安装必要的软件包,例如 `conntrack`、`ipset`、`iptables` 等: ```bash sudo apt-get update && sudo apt-get install -y conntrack ipset iptables ``` #### 安装 Docker Kubernetes 支持多种容器运行时,Docker 是其中一种常见选择。安装最新版本的 Docker 并设置开机自启: ```bash curl -fsSL https://get.docker.com | sh- sudo systemctl enable docker && sudo systemctl start docker ``` #### 下载并解压 Kubernetes 二进制文件 从 [Kubernetes GitHub 发布页面](https://github.com/kubernetes/kubernetes/releases) 下载所需版本的二进制文件,然后将其解压到目标目录: ```bash wget https://dl.k8s.io/v1.26.0/kubernetes-server-linux-amd64.tar.gz tar -xzvf kubernetes-server-linux-amd64.tar.gz cd kubernetes/server/bin/ sudo cp kube-apiserver kube-controller-manager kube-scheduler kubectl /usr/local/bin/ ``` #### 配置 etcd 集群 etcd 是 Kubernetes 的分布式键值存储系统,用于保存集群的所有数据。在多个节点上安装并配置 etcd 集群,确保高可用性。以下是节点的示例配置: ```bash ETCD_NAME="master1" ETCD_DATA_DIR="/var/lib/etcd" ETCD_LISTEN_PEER_URLS="http://192.168.1.10:2380" ETCD_LISTEN_CLIENT_URLS="http://192.168.1.10:2379,http://127.0.0.1:2379" ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.1.10:2380" ETCD_ADVERTISE_CLIENT_URLS="http://192.168.1.10:2379" ETCD_INITIAL_CLUSTER="master1=http://192.168.1.10:2380,master2=http://192.168.1.11:2380,master3=http://192.168.1.12:2380" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-1" ETCD_INITIAL_CLUSTER_STATE="new" ``` #### 配置 kube-apiserver 在每个 Master 节点上配置 kube-apiserver,指定 etcd 集群地址和其他参数: ```bash KUBE_APISERVER_OPTS="--logtostderr=true --v=4 --etcd-servers=http://192.168.1.10:2379,http://192.168.1.11:2379,http://192.168.1.12:2379 --bind-address=0.0.0.0 --secure-port=6443 --advertise-address=192.168.1.10 --allow-privileged=true --service-cluster-ip-range=10.0.0.0/24 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,NodeRestriction --authorization-mode=RBAC,Node --enable-bootstrap-token-auth --token-auth-file=/etc/kubernetes/token.csv --tls-cert-file=/etc/kubernetes/pki/apiserver.crt --tls-private-key-file=/etc/kubernetes/pki/apiserver.key --client-ca-file=/etc/kubernetes/pki/ca.crt --service-account-key-file=/etc/kubernetes/pki/sa.pub --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key --requestheader-allowed-names=front-proxy-client --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --enable-aggregator-routing=true" ``` #### 配置 kube-controller-manager 在每个 Master 节点上配置 kube-controller-manager,指定 master 地址和其他参数: ```bash KUBE_CONTROLLER_MANAGER_OPTS="--logtostderr=true --v=4 --master=127.0.0.1:8080 --leader-elect=true --address=0.0.0.0 --cluster-name=kubernetes --cluster-signing-cert-file=/etc/kubernetes/pki/ca.crt --cluster-signing-key-file=/etc/kubernetes/pki/ca.key --service-account-private-key-file=/etc/kubernetes/pki/sa.key --root-ca-file=/etc/kubernetes/pki/ca.crt --node-cidr-mask-size=24" ``` #### 配置 kube-scheduler 在每个 Master 节点上配置 kube-scheduler,指定 master 地址和其他参数: ```bash KUBE_SCHEDULER_OPTS="--logtostderr=true --v=4 --master=127.0.0.1:8080 --leader-elect=true --address=0.0.0.0" ``` #### 启动 Master 组件 创建 systemd 服务文件并启动各组件服务。以 kube-apiserver 为例: ```ini [Unit] Description=Kubernetes API Server Documentation=https://github.com/kubernetes/kubernetes [Service] ExecStart=/usr/local/bin/kube-apiserver \ --logtostderr=true \ --v=4 \ --etcd-servers=http://192.168.1.10:2379,http://192.168.1.11:2379,http://192.168.1.12:2379 \ --bind-address=0.0.0.0 \ --secure-port=6443 \ --advertise-address=192.168.1.10 \ --allow-privileged=true \ --service-cluster-ip-range=10.0.0.0/24 \ --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,NodeRestriction \ --authorization-mode=RBAC,Node \ --enable-bootstrap-token-auth \ --token-auth-file=/etc/kubernetes/token.csv \ --tls-cert-file=/etc/kubernetes/pki/apiserver.crt \ --tls-private-key-file=/etc/kubernetes/pki/apiserver.key \ --client-ca-file=/etc/kubernetes/pki/ca.crt \ --service-account-key-file=/etc/kubernetes/pki/sa.pub \ --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt \ --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt \ --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key \ --requestheader-allowed-names=front-proxy-client \ --requestheader-extra-headers-prefix=X-Remote-Extra- \ --requestheader-group-headers=X-Remote-Group \ --enable-aggregator-routing=true Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target ``` #### 配置 kubelet 在所有节点上配置 kubelet,指定 master 地址和其他参数: ```bash KUBELET_OPTS="--logtostderr=true --v=4 --hostname-override=192.168.1.10 --kubeconfig=/etc/kubernetes/kubelet.conf --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --config=/etc/kubernetes/config/kubelet --cgroup-driver=systemd/cgroupfs" ``` #### 配置 kube-proxy 在所有节点上配置 kube-proxy,指定 master 地址和其他参数: ```bash KUBE_PROXY_OPTS="--logtostderr=true --v=4 --master=192.168.1.10:6443 --config=/etc/kubernetes/config/proxy" ``` #### 初始化集群 使用 `kops` 或手动创建 CA 证书和密钥对,生成所需的 TLS 证书。之后,通过 `kubectl` 工具验证集群状态: ```bash kubectl get nodes ``` #### 高可用配置 为了实现高可用性,可以使用 Keepalived 或 HAProxy 设置虚拟 IP 地址,指向所有 Master 节点。这样客户端可以通过虚拟 IP 访问集群,而无需关心具体的 Master 节点。 #### 监控与维护 使用 Prometheus 和 Grafana 进行监控,定期检查日志文件(如 `/var/log/kube-apiserver.log`),并确保所有组件正常运行。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值