Kubernetes二进制部署——证书的制作和ETCD的部署

本文详细介绍了如何在Kubernetes环境中使用自签SSL证书创建ETCD集群,并通过二进制部署方式进行节点配置,包括证书制作、防火墙设置和etcd服务的启动与配置。

一、实验环境

主机名 IP 服务
master 192.168.172.10/24 kube-apiserver kube-controller-manager kube-scheduler etcd
node1 192.168.172.20/24 etcd docker kubelet kube-proxyflannel
node2 192.168.172.30/24 etcd docker kubelet kube-proxyflannel

自签 SSL 证书

组件 使用的证书
etcd ca.pem、server.pem、server-key.pem
fiannel ca.pem、server.pem、server-key.pem
kube-apiserver ca.pem、server.pem、server-key.pem
kubelet ca.pem、ca-key.pem
kube-proxy ca.pem、kube-proxy.pem、kube-proxy-key.pem
kubectl ca.pem、admin.pem、admin-key.pem

二、ETCD集群部署

二进制部署方式

1、环境部署

更改matser主机名'
hostnamectl set-hostname master
su -


另外两台node1、2节点'
hostnamectl set-hostname node1
 su -
hostnamectl set-hostname node2
 su -

关闭防火墙及安全访问控制机制'
systemctl stop firewalld
systemctl disable firewalld.service 
setenforce 0

2、master节点

准备工作

[root@master ~]# mkdir k8s
[root@master ~]# cd k8s/
[root@master ~/k8s]# vim cfssl.sh          #此脚本用于下载证书制作工具
curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o /usr/local/bin/cfssl
curl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o /usr/local/bin/cfssljson
curl -L https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -o /usr/local/bin/cfssl-certinfo
chmod +x /usr/local/bin/cfssl /usr/local/bin/cfssljson /usr/local/bin/cfssl-certinfo

[root@master ~/k8s]# bash cfssl.sh           #执行该脚本

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

开始制作证书

[root@master ~/k8s]# mkdir etcd-cert
[root@master ~/k8s]# cd etcd-cert/
##定义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 
### 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 集群 etcdKubernetes 的分布式键值存储系统,用于保存集群的所有数据。在多个节点上安装并配置 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、付费专栏及课程。

余额充值