news 2026/4/24 13:42:21

K8s-1.29.2二进制安装-第二章(K8s及ETCD下载及安装)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
K8s-1.29.2二进制安装-第二章(K8s及ETCD下载及安装)

K8s二进制安装:主要内容是安装k8s及安装etcd,并生成了K8s和etcd需要的证书文件(文章结束后会把使用到的容器镜像及工具一并共享)

1.安装 K8S 和 ETCD 二进制文件

# 下载安装包wgethttps://github.com/etcd-io/etcd/releases/download/v3.5.12/etcd-v3.5.12-linux-amd64.tar.gzwgethttps://cdn.dl.k8s.io/release/v1.29.2/kubernetes-server-linux-amd64.tar.gz# 解压k8s安装文件tar-xf kubernetes-server-linux-amd64.tar.gz --strip-components=3-C /usr/local/bin kubernetes/server/bin/kube{let,ctl,-apiserver,-controller-manager,-scheduler,-proxy}# 解压etcd安装文件tar-xf etcd*.tar.gz&&mvetcd-*/etcd /usr/local/bin/&&mvetcd-*/etcdctl /usr/local/bin/# 查看/usr/local/bin下内容[root@server170 ~]# ll /usr/local/bin/总用量543048-rwxr-xr-x152828789939235438081312024etcd -rwxr-xr-x152828789939177438721312024etcdctl -rwxr-xr-x1root root1237196802142024kube-apiserver -rwxr-xr-x1root root1183498242142024kube-controller-manager -rwxr-xr-x1root root497049602142024kubectl -rwxr-xr-x1root root1118126082142024kubelet -rwxr-xr-x1root root552632322142024kube-proxy -rwxr-xr-x1root root559431682142024kube-scheduler# 查看版本kubelet --version Kubernetes v1.29.2 etcdctl version etcdctl version:3.5.12 API version:3.5# 将组件发送至其它 k8s 节点(定义一个变量)Master='server171 server172'Work='server173 server174'# 拷贝 master 组件(使用for循环调取环境变量进行传输)forNODEin$Master;doecho$NODE;scp/usr/local/bin/kube{let,ctl,-apiserver,-controller-manager,-scheduler,-proxy}$NODE:/usr/local/bin/;scp/usr/local/bin/etcd*$NODE:/usr/local/bin/;done# 拷贝 work 组件forNODEin$Work;doecho$NODE;scp/usr/local/bin/kube{let,-proxy}$NODE:/usr/local/bin/;done# 所有节点执行mkdir-p /opt/cni/bin

2.相关证书生成

2.1 安装证书工具

# master01 节点下载证书生成工具wget"https://github.com/cloudflare/cfssl/releases/download/v1.6.4/cfssl_1.6.4_linux_amd64"-O /usr/local/bin/cfsslwget"https://github.com/cloudflare/cfssl/releases/download/v1.6.4/cfssljson_1.6.4_linux_amd64"-O /usr/local/bin/cfssljsonchmod+x /usr/local/bin/cfssl /usr/local/bin/cfssljson

2.2 生成 ETCD 证书(以下操作在所有 master 节点操作)

mkdir/etc/etcd/ssl -pcd/etc/etcd/ssl# 写入生成证书所需的配置文件,master01 节点生成 etcd 证书cat>ca-config.json<<EOF { "signing": { "default": { "expiry": "876000h" }, "profiles": { "kubernetes": { "usages": [ "signing", "key encipherment", "server auth", "client auth" ], "expiry": "876000h" } } } } EOF# 对于kubernetes配置文件,证书的过期时间也是876000h,即100年。cat>etcd-ca-csr.json<<EOF { "CN": "etcd", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "Beijing", "L": "Beijing", "O": "etcd", "OU": "Etcd Security" } ], "ca": { "expiry": "876000h" } } EOF# 生成证书cfssl gencert -initca etcd-ca-csr.json|cfssljson -bare /etc/etcd/ssl/etcd-cacat>etcd-csr.json<<EOF { "CN": "etcd", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "Beijing", "L": "Beijing", "O": "etcd", "OU": "Etcd Security" } ] } EOF# 生成证书cfssl gencert -ca=/etc/etcd/ssl/etcd-ca.pem -ca-key=/etc/etcd/ssl/etcd-ca-key.pem -config=ca-config.json -hostname=127.0.0.1,server170,server171,server172,192.168.1.170,192.168.1.171,192.168.1.172 -profile=kubernetes etcd-csr.json|cfssljson -bare /etc/etcd/ssl/etcd# 将证书复制到其他Master节点Master='server171 server172'forNODEin$Master;dossh$NODE"mkdir -p /etc/etcd/ssl";forFILEinetcd-ca-key.pem etcd-ca.pem etcd-key.pem etcd.pem;doscp/etc/etcd/ssl/${FILE}$NODE:/etc/etcd/ssl/${FILE};done;done

2.4 生成 K8S 相关证书(特别说明除外,以下操作在所有 master 节点操作)

mkdir-p /etc/kubernetes/pkicd/etc/kubernetes/pki# master 节点生成 k8s 证书, 写入生成证书所需的配置文件cat>ca-csr.json<<EOF { "CN": "kubernetes", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "Beijing", "L": "Beijing", "O": "Kubernetes", "OU": "Kubernetes-manual" } ], "ca": { "expiry": "876000h" } } EOF# 生成证书cfssl gencert -initca ca-csr.json|cfssljson -bare /etc/kubernetes/pki/cacat>apiserver-csr.json<<EOF { "CN": "kube-apiserver", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "Beijing", "L": "Beijing", "O": "Kubernetes", "OU": "Kubernetes-manual" } ] } EOFcat>ca-config.json<<EOF { "signing": { "default": { "expiry": "876000h" }, "profiles": { "kubernetes": { "usages": [ "signing", "key encipherment", "server auth", "client auth" ], "expiry": "876000h" } } } } EOFcfssl gencert -ca=/etc/kubernetes/pki/ca.pem -ca-key=/etc/kubernetes/pki/ca-key.pem -config=ca-config.json -hostname=10.96.0.1,192.168.10.16,127.0.0.1,kubernetes,kubernetes.default,kubernetes.default.svc,kubernetes.default.svc.cluster,kubernetes.default.svc.cluster.local,xxx.top,xxx.com,xxx.cn,192.168.1.170,192.168.1.171,192.168.1.172,192.168.1.173,192.168.1.174,192.168.1.175,192.168.1.176,192.168.1.177,192.168.1.178,192.168.1.179,192.168.1.180 -profile=kubernetes apiserver-csr.json|cfssljson -bare /etc/kubernetes/pki/apiserver# 生成 apiserver 聚合证书cat>front-proxy-ca-csr.json<<EOF { "CN": "kubernetes", "key": { "algo": "rsa", "size": 2048 }, "ca": { "expiry": "876000h" } } EOF# 生成证书cfssl gencert -initca front-proxy-ca-csr.json|cfssljson -bare /etc/kubernetes/pki/front-proxy-cacat>front-proxy-client-csr.json<<EOF { "CN": "front-proxy-client", "key": { "algo": "rsa", "size": 2048 } } EOFcfssl gencert\-ca=/etc/kubernetes/pki/front-proxy-ca.pem\-ca-key=/etc/kubernetes/pki/front-proxy-ca-key.pem\-config=ca-config.json\-profile=kubernetes front-proxy-client-csr.json|cfssljson -bare /etc/kubernetes/pki/front-proxy-client# 生成 controller-manage 的证书cat>manager-csr.json<<EOF { "CN": "system:kube-controller-manager", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "Beijing", "L": "Beijing", "O": "system:kube-controller-manager", "OU": "Kubernetes-manual" } ] } EOFcfssl gencert\-ca=/etc/kubernetes/pki/ca.pem\-ca-key=/etc/kubernetes/pki/ca-key.pem\-config=ca-config.json\-profile=kubernetes\manager-csr.json|cfssljson -bare /etc/kubernetes/pki/controller-manager kubectl config set-cluster kubernetes\--certificate-authority=/etc/kubernetes/pki/ca.pem\--embed-certs=true\--server=https://127.0.0.1:8443\--kubeconfig=/etc/kubernetes/controller-manager.kubeconfig kubectl config set-context system:kube-controller-manager@kubernetes\--cluster=kubernetes\--user=system:kube-controller-manager\--kubeconfig=/etc/kubernetes/controller-manager.kubeconfig kubectl config set-credentials system:kube-controller-manager\--client-certificate=/etc/kubernetes/pki/controller-manager.pem\--client-key=/etc/kubernetes/pki/controller-manager-key.pem\--embed-certs=true\--kubeconfig=/etc/kubernetes/controller-manager.kubeconfig kubectl config use-context system:kube-controller-manager@kubernetes\--kubeconfig=/etc/kubernetes/controller-manager.kubeconfig# 生成 kube-scheduler 的证书cat>scheduler-csr.json<<EOF { "CN": "system:kube-scheduler", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "Beijing", "L": "Beijing", "O": "system:kube-scheduler", "OU": "Kubernetes-manual" } ] } EOFcfssl gencert\-ca=/etc/kubernetes/pki/ca.pem\-ca-key=/etc/kubernetes/pki/ca-key.pem\-config=ca-config.json\-profile=kubernetes\scheduler-csr.json|cfssljson -bare /etc/kubernetes/pki/scheduler kubectl config set-cluster kubernetes\--certificate-authority=/etc/kubernetes/pki/ca.pem\--embed-certs=true\--server=https://127.0.0.1:8443\--kubeconfig=/etc/kubernetes/scheduler.kubeconfig kubectl config set-credentials system:kube-scheduler\--client-certificate=/etc/kubernetes/pki/scheduler.pem\--client-key=/etc/kubernetes/pki/scheduler-key.pem\--embed-certs=true\--kubeconfig=/etc/kubernetes/scheduler.kubeconfig kubectl config set-context system:kube-scheduler@kubernetes\--cluster=kubernetes\--user=system:kube-scheduler\--kubeconfig=/etc/kubernetes/scheduler.kubeconfig kubectl config use-context system:kube-scheduler@kubernetes\--kubeconfig=/etc/kubernetes/scheduler.kubeconfig# 生成 admin 的证书配置cat>admin-csr.json<<EOF { "CN": "admin", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "Beijing", "L": "Beijing", "O": "system:masters", "OU": "Kubernetes-manual" } ] } EOFcfssl gencert\-ca=/etc/kubernetes/pki/ca.pem\-ca-key=/etc/kubernetes/pki/ca-key.pem\-config=ca-config.json\-profile=kubernetes\admin-csr.json|cfssljson -bare /etc/kubernetes/pki/admin kubectl config set-cluster kubernetes\--certificate-authority=/etc/kubernetes/pki/ca.pem\--embed-certs=true\--server=https://127.0.0.1:8443\--kubeconfig=/etc/kubernetes/admin.kubeconfig kubectl config set-credentials kubernetes-admin\--client-certificate=/etc/kubernetes/pki/admin.pem\--client-key=/etc/kubernetes/pki/admin-key.pem\--embed-certs=true\--kubeconfig=/etc/kubernetes/admin.kubeconfig kubectl config set-context kubernetes-admin@kubernetes\--cluster=kubernetes\--user=kubernetes-admin\--kubeconfig=/etc/kubernetes/admin.kubeconfig kubectl config use-context kubernetes-admin@kubernetes --kubeconfig=/etc/kubernetes/admin.kubeconfig# 创建 kube-proxy 证书cat>kube-proxy-csr.json<<EOF { "CN": "system:kube-proxy", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "Beijing", "L": "Beijing", "O": "system:kube-proxy", "OU": "Kubernetes-manual" } ] } EOFcfssl gencert\-ca=/etc/kubernetes/pki/ca.pem\-ca-key=/etc/kubernetes/pki/ca-key.pem\-config=ca-config.json\-profile=kubernetes\kube-proxy-csr.json|cfssljson -bare /etc/kubernetes/pki/kube-proxy kubectl config set-cluster kubernetes\--certificate-authority=/etc/kubernetes/pki/ca.pem\--embed-certs=true\--server=https://127.0.0.1:8443\--kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig kubectl config set-credentials kube-proxy\--client-certificate=/etc/kubernetes/pki/kube-proxy.pem\--client-key=/etc/kubernetes/pki/kube-proxy-key.pem\--embed-certs=true\--kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig kubectl config set-context kube-proxy@kubernetes\--cluster=kubernetes\--user=kube-proxy\--kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig kubectl config use-context kube-proxy@kubernetes --kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig# 创建 ServiceAccount Key ——secretopenssl genrsa -out /etc/kubernetes/pki/sa.key2048openssl rsa -in /etc/kubernetes/pki/sa.key -pubout -out /etc/kubernetes/pki/sa.pub# 将证书发送到其他 master 节点# 其他节点创建目录mkdir/etc/kubernetes/pki/ -pforNODEink8s-master02 k8s-master03;doforFILEin$(ls/etc/kubernetes/pki|grep-v etcd);doscp/etc/kubernetes/pki/${FILE}$NODE:/etc/kubernetes/pki/${FILE};done;forFILEinadmin.kubeconfig controller-manager.kubeconfig scheduler.kubeconfig;doscp/etc/kubernetes/${FILE}$NODE:/etc/kubernetes/${FILE};done;done# 查看证书ls/etc/kubernetes/pki/

3.ETCD 配置

# Server170cat>/etc/etcd/etcd.config.yml<<EOF name: 'server170'># Server171cat>/etc/etcd/etcd.config.yml<<EOF name: 'server171'># Server172cat>/etc/etcd/etcd.config.yml<<EOF name: 'server172'># 创建 service( 所有 master 节点操作)cat>/usr/lib/systemd/system/etcd.service<<EOF [Unit] Description=Etcd Service Documentation=https://coreos.com/etcd/docs/latest/ After=network.target [Service] Type=notify ExecStart=/usr/local/bin/etcd --config-file=/etc/etcd/etcd.config.yml Restart=on-failure RestartSec=10 LimitNOFILE=65536 [Install] WantedBy=multi-user.target Alias=etcd3.service EOF# 创建 etcd 证书目录(3台master)mkdir/etc/kubernetes/pki/etcdln-s /etc/etcd/ssl/* /etc/kubernetes/pki/etcd/ systemctl daemon-reload systemctlenable--now etcd.service systemctl status etcd.service# 查看 etcd 状态# 如果要用 IPv6 那么把 IPv4 地址修改为 IPv6 即可exportETCDCTL_API=3etcdctl --endpoints="192.168.1.170:2379,192.168.1.171:2379,192.168.1.172:2379"--cacert=/etc/kubernetes/pki/etcd/etcd-ca.pem --cert=/etc/kubernetes/pki/etcd/etcd.pem --key=/etc/kubernetes/pki/etcd/etcd-key.pem endpoint status --write-out=table# 输出结果+--------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+|ENDPOINT|ID|VERSION|DB SIZE|IS LEADER|IS LEARNER|RAFTTERM|RAFT INDEX|RAFT APPLIED INDEX|ERRORS|+--------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+|192.168.1.170:2379|c1621f2f11fc33f9|3.5.12|20kB|true|false|2|9|9|||192.168.1.171:2379|14f18e5e057e3164|3.5.12|20kB|false|false|2|9|9|||192.168.1.172:2379|225a00eef92e8f19|3.5.12|20kB|false|false|2|9|9||+--------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 20:58:04

6、Linux命令实用技巧全解析

Linux命令实用技巧全解析 在Linux系统的使用中,掌握各种命令的使用方法和技巧能够极大地提高工作效率。本文将详细介绍一些常用的Linux命令及其应用场景,帮助大家更好地利用Linux系统。 信息搜索与导航命令 在使用Info系统时,我们可以通过一些快捷键来进行文本搜索和获取…

作者头像 李华
网站建设 2026/4/16 10:59:06

使用Docker快速启动EmotiVoice语音合成服务

使用Docker快速启动EmotiVoice语音合成服务 在智能语音内容需求爆发的今天&#xff0c;无论是有声书、游戏NPC对话&#xff0c;还是虚拟主播直播&#xff0c;用户对“听得舒服”的语音质量提出了前所未有的高要求。传统TTS&#xff08;文本转语音&#xff09;系统虽然能完成基…

作者头像 李华
网站建设 2026/4/22 3:10:02

31、《Expect 中 spawn 命令的使用与相关问题处理》

《Expect 中 spawn 命令的使用与相关问题处理》 1. 检查 spawn 的错误 之前的示例都假定 spawn 总是能成功,但实际上并非如此。不过,它通常只在特殊环境或特殊情况下才会失败。下面我们来详细了解如何判断 spawn 是否成功。 spawn 命令通常会返回新生成进程的进程 ID…

作者头像 李华
网站建设 2026/4/13 14:22:33

32、Expect工具的进程与信号处理

Expect工具的进程与信号处理 1. 特殊系统下的Expect使用 幸运的是,某些无法同时运行多个进程的系统越来越少见了。虽然不能在这类系统上充分发挥Expect的全部功能,但每次自动化一个应用程序,仍可以完成一些有用的工作。在安装时,Expect会检测并报告系统是否无法同时生成多…

作者头像 李华
网站建设 2026/4/23 22:42:25

34、《深入理解 interact 命令:功能、模式与匹配机制》

《深入理解 interact 命令:功能、模式与匹配机制》 1. interact 命令概述 interact 命令具有多种强大功能: - 当从用户或派生进程中检测到特定模式时执行相应操作。 - 允许用户多次控制派生进程,之后再将控制权交回脚本以进行进一步自动化交互。 - 抑制部分或全部交互内…

作者头像 李华