怎么问客户做不做网站,手机网站竞价,网站发布与推广方式,很色h做游戏网站二进制安装Kubernetes#xff08;k8s#xff09;v1.30.1 https://github.com/cby-chen/Kubernetes 开源不易#xff0c;帮忙点个star#xff0c;谢谢了 介绍 kubernetes#xff08;k8s#xff09;二进制高可用安装部署#xff0c;支持IPv4IPv6双栈。 我使用IPV6的目的是… 二进制安装Kubernetesk8sv1.30.1 https://github.com/cby-chen/Kubernetes 开源不易帮忙点个star谢谢了 介绍 kubernetesk8s二进制高可用安装部署支持IPv4IPv6双栈。 我使用IPV6的目的是在公网进行访问所以我配置了IPV6静态地址。 若您没有IPV6环境或者不想使用IPv6不对主机进行配置IPv6地址即可。 不配置IPV6不影响后续不过集群依旧是支持IPv6的。为后期留有扩展可能性。 若不要IPv6 不给网卡配置IPv6即可不要对IPv6相关配置删除或操作否则会出问题。 强烈建议在Github上查看文档 Github出问题会更新文档并且后续尽可能第一时间更新新版本文档 手动项目地址https://github.com/cby-chen/Kubernetes 1.环境 主机名称IP地址说明软件192.168.1.60外网节点下载各种所需安装包Master01192.168.1.41master节点kube-apiserver、kube-controller-manager、kube-scheduler、etcd、kubelet、kube-proxy、nfs-client、haproxy、keepalived、nginxMaster02192.168.1.42master节点kube-apiserver、kube-controller-manager、kube-scheduler、etcd、kubelet、kube-proxy、nfs-client、haproxy、keepalived、nginxMaster03192.168.1.43master节点kube-apiserver、kube-controller-manager、kube-scheduler、etcd、kubelet、kube-proxy、nfs-client、haproxy、keepalived、nginxNode01192.168.1.44node节点kubelet、kube-proxy、nfs-client、nginxNode02192.168.1.45node节点kubelet、kube-proxy、nfs-client、nginx192.168.1.46VIP 网段物理主机192.168.1.0/24service10.96.0.0/12pod172.16.0.0/12 安装包已经整理好https://mirrors.chenby.cn/https://github.com/cby-chen/Kubernetes/releases/download/v1.30.1/kubernetes-v1.30.1.tar 1.1.k8s基础系统环境配置 1.2.配置IP # 注意
# 若虚拟机是进行克隆的那么网卡的UUID会重复
# 若UUID重复需要重新生成新的UUID
# UUID重复无法获取到IPV6地址
# 克隆出来的虚拟机 CentOS系统需要删除DUID
rm -rf /etc/machine-id
systemd-machine-id-setup
reboot
#
# 查看当前的网卡列表和 UUID
# nmcli con show
# 删除要更改 UUID 的网络连接
# nmcli con delete uuid 原 UUID
# 重新生成 UUID
# nmcli con add type ethernet ifname 接口名称 con-name 新名称
# 重新启用网络连接
# nmcli con up 新名称# 更改网卡的UUID
# 先配置静态IP之后使用ssh方式配置不断连
ssh root192.168.1.41 nmcli con delete uuid 8e8afb37-9cb4-362e-ba72-82568cb54312;nmcli con add type ethernet ifname ens18 con-name ens18;nmcli con up ens18
ssh root192.168.1.42 nmcli con delete uuid 8e8afb37-9cb4-362e-ba72-82568cb54312;nmcli con add type ethernet ifname ens18 con-name ens18;nmcli con up ens18
ssh root192.168.1.43 nmcli con delete uuid 8e8afb37-9cb4-362e-ba72-82568cb54312;nmcli con add type ethernet ifname ens18 con-name ens18;nmcli con up ens18
ssh root192.168.1.44 nmcli con delete uuid 8e8afb37-9cb4-362e-ba72-82568cb54312;nmcli con add type ethernet ifname ens18 con-name ens18;nmcli con up ens18
ssh root192.168.1.45 nmcli con delete uuid 8e8afb37-9cb4-362e-ba72-82568cb54312;nmcli con add type ethernet ifname ens18 con-name ens18;nmcli con up ens18# 参数解释
#
# ssh ssh root192.168.1.41
# 使用SSH登录到IP为192.168.1.41的主机使用root用户身份。
#
# nmcli con delete uuid 708a1497-2192-43a5-9f03-2ab936fb3c44
# 删除 UUID 为 708a1497-2192-43a5-9f03-2ab936fb3c44 的网络连接这是 NetworkManager 中一种特定网络配置的唯一标识符。
#
# nmcli con add type ethernet ifname ens18 con-name ens18
# 添加一种以太网连接类型并指定接口名为 ens18连接名称也为 ens18。
#
# nmcli con up ens18
# 开启 ens18 这个网络连接。
#
# 简单来说这个命令的作用是删除一个特定的网络连接配置并添加一个名为 ens18 的以太网连接然后启用这个新的连接。# 修改静态的IPv4地址
ssh root192.168.1.158 nmcli con mod ens18 ipv4.addresses 192.168.1.41/24; nmcli con mod ens18 ipv4.gateway 192.168.1.1; nmcli con mod ens18 ipv4.method manual; nmcli con mod ens18 ipv4.dns 8.8.8.8; nmcli con up ens18
ssh root192.168.1.151 nmcli con mod ens18 ipv4.addresses 192.168.1.42/24; nmcli con mod ens18 ipv4.gateway 192.168.1.1; nmcli con mod ens18 ipv4.method manual; nmcli con mod ens18 ipv4.dns 8.8.8.8; nmcli con up ens18
ssh root192.168.1.152 nmcli con mod ens18 ipv4.addresses 192.168.1.43/24; nmcli con mod ens18 ipv4.gateway 192.168.1.1; nmcli con mod ens18 ipv4.method manual; nmcli con mod ens18 ipv4.dns 8.8.8.8; nmcli con up ens18
ssh root192.168.1.157 nmcli con mod ens18 ipv4.addresses 192.168.1.44/24; nmcli con mod ens18 ipv4.gateway 192.168.1.1; nmcli con mod ens18 ipv4.method manual; nmcli con mod ens18 ipv4.dns 8.8.8.8; nmcli con up ens18
ssh root192.168.1.155 nmcli con mod ens18 ipv4.addresses 192.168.1.45/24; nmcli con mod ens18 ipv4.gateway 192.168.1.1; nmcli con mod ens18 ipv4.method manual; nmcli con mod ens18 ipv4.dns 8.8.8.8; nmcli con up ens18# 参数解释
#
# ssh root192.168.1.154
# 使用SSH登录到IP为192.168.1.154的主机使用root用户身份。
#
# nmcli con mod ens18 ipv4.addresses 192.168.1.41/24
# 修改ens18网络连接的IPv4地址为192.168.1.41子网掩码为 24。
#
# nmcli con mod ens18 ipv4.gateway 192.168.1.1
# 修改ens18网络连接的IPv4网关为192.168.1.1。
#
# nmcli con mod ens18 ipv4.method manual
# 将ens18网络连接的IPv4配置方法设置为手动。
#
# nmcli con mod ens18 ipv4.dns 8.8.8.8
# 将ens18网络连接的IPv4 DNS服务器设置为 8.8.8.8。
#
# nmcli con up ens18
# 启动ens18网络连接。
#
# 总体来说这条命令是通过SSH远程登录到指定的主机并使用网络管理命令 (nmcli) 修改ens18网络连接的配置包括IP地址、网关、配置方法和DNS服务器并启动该网络连接。# 没有IPv6选择不配置即可
ssh root192.168.1.41 nmcli con mod ens18 ipv6.addresses fc00:43f4:1eea:1::10; nmcli con mod ens18 ipv6.gateway fc00:43f4:1eea:1::1; nmcli con mod ens18 ipv6.method manual; nmcli con mod ens18 ipv6.dns 2400:3200::1; nmcli con up ens18
ssh root192.168.1.42 nmcli con mod ens18 ipv6.addresses fc00:43f4:1eea:1::20; nmcli con mod ens18 ipv6.gateway fc00:43f4:1eea:1::1; nmcli con mod ens18 ipv6.method manual; nmcli con mod ens18 ipv6.dns 2400:3200::1; nmcli con up ens18
ssh root192.168.1.43 nmcli con mod ens18 ipv6.addresses fc00:43f4:1eea:1::30; nmcli con mod ens18 ipv6.gateway fc00:43f4:1eea:1::1; nmcli con mod ens18 ipv6.method manual; nmcli con mod ens18 ipv6.dns 2400:3200::1; nmcli con up ens18
ssh root192.168.1.44 nmcli con mod ens18 ipv6.addresses fc00:43f4:1eea:1::40; nmcli con mod ens18 ipv6.gateway fc00:43f4:1eea:1::1; nmcli con mod ens18 ipv6.method manual; nmcli con mod ens18 ipv6.dns 2400:3200::1; nmcli con up ens18
ssh root192.168.1.45 nmcli con mod ens18 ipv6.addresses fc00:43f4:1eea:1::50; nmcli con mod ens18 ipv6.gateway fc00:43f4:1eea:1::1; nmcli con mod ens18 ipv6.method manual; nmcli con mod ens18 ipv6.dns 2400:3200::1; nmcli con up ens18# 参数解释
#
# ssh root192.168.1.41
# 通过SSH连接到IP地址为192.168.1.41的远程主机使用root用户进行登录。
#
# nmcli con mod ens18 ipv6.addresses fc00:43f4:1eea:1::10
# 使用nmcli命令修改ens18接口的IPv6地址为fc00:43f4:1eea:1::10。
#
# nmcli con mod ens18 ipv6.gateway fc00:43f4:1eea:1::1
# 使用nmcli命令修改ens18接口的IPv6网关为fc00:43f4:1eea:1::1。
#
# nmcli con mod ens18 ipv6.method manual
# 使用nmcli命令将ens18接口的IPv6配置方法修改为手动配置。
#
# nmcli con mod ens18 ipv6.dns 2400:3200::1
# 使用nmcli命令设置ens18接口的IPv6 DNS服务器为2400:3200::1。
#
# nmcli con up ens18
# 使用nmcli命令启动ens18接口。
#
# 这个命令的目的是在远程主机上配置ens18接口的IPv6地址、网关、配置方法和DNS服务器并启动ens18接口。# 查看网卡配置
# nmcli device show ens18
# nmcli con show ens18
[rootlocalhost ~]# cat /etc/NetworkManager/system-connections/ens18.nmconnection
[connection]
idens18
uuid97445eea-70e8-47a7-8be4-a707de271f5e
typeethernet
interface-nameens18
timestamp1716705021
[ethernet]
[ipv4]
address1192.168.1.41/24,192.168.1.1
dns8.8.8.8;
methodmanual
[ipv6]
addr-gen-modedefault
methodauto
[proxy]
[rootlocalhost ~]# # 参数解释
# 1. [connection]:
# - id: 连接的唯一标识符用于内部引用。
# - uuid: 连接的通用唯一标识符UUID确保在系统中的唯一性。
# - type: 指定连接的类型本例中为以太网。
# - interface-name: 网络接口的名称ens18表示与此连接关联的物理或逻辑网络接口。
# - timestamp: 时间戳指示连接配置上次修改的时间。
# 2. [ethernet]:
# - 通常包含以太网特定的配置设置如MAC地址或链路速度。
# 3. [ipv4]:
# - address1: 以CIDR表示法指定IPv4地址和子网掩码192.168.1.41/24。还包括网关IP192.168.1.1。
# - dns: 指定要使用的DNS服务器本例中为8.8.8.8提供将域名转换为IP地址的手段。
# - method: 指定获取IPv4地址的方法。在本例中设置为手动表示IP地址是静态配置的。
# 4. [ipv6]:
# - addr-gen-mode: 指定IPv6地址生成模式。设置为默认通常意味着地址是根据接口的MAC地址生成的。
# - method: 指定获取IPv6地址的方法。在本例中设置为自动表示使用DHCPv6或SLAAC等协议进行自动配置。
# 5. [proxy]:
# - 通常用于配置代理设置如HTTP或SOCKS代理。 1.3.设置主机名 hostnamectl set-hostname k8s-master01
hostnamectl set-hostname k8s-master02
hostnamectl set-hostname k8s-master03
hostnamectl set-hostname k8s-node01
hostnamectl set-hostname k8s-node02# 参数解释
#
# 参数: set-hostname
# 解释: 这是hostnamectl命令的一个参数用于设置系统的主机名。
#
# 参数: k8s-master01
# 解释: 这是要设置的主机名将系统的主机名设置为k8s-master01。 1.4.配置yum源 # 其他系统的源地址
# https://help.mirrors.cernet.edu.cn/# 对于私有仓库
sed -e s|^mirrorlist|#mirrorlist|g -e s|^#baseurlhttp://mirror.centos.org/\$contentdir|baseurlhttp://192.168.1.123/centos|g -i.bak /etc/yum.repos.d/CentOS-*.repo# 对于 Ubuntu
sed -i s/cn.archive.ubuntu.com/mirrors.ustc.edu.cn/g /etc/apt/sources.list# epel扩展源
sudo yum install -y epel-release
sudo sed -e s!^metalink!#metalink!g \-e s!^#baseurl!baseurl!g \-e s!https\?://download\.fedoraproject\.org/pub/epel!https://mirror.nju.edu.cn/epel!g \-e s!https\?://download\.example/pub/epel!https://mirror.nju.edu.cn/epel!g \-i /etc/yum.repos.d/epel{,-testing}.repo# 对于 CentOS 7
sudo sed -e s|^mirrorlist|#mirrorlist|g \-e s|^#baseurlhttp://mirror.centos.org/centos|baseurlhttps://mirror.nju.edu.cn/centos|g \-i.bak \/etc/yum.repos.d/CentOS-*.repo# 对于 CentOS 8
sudo sed -e s|^mirrorlist|#mirrorlist|g \-e s|^#baseurlhttp://mirror.centos.org/$contentdir|baseurlhttps://mirror.nju.edu.cn/centos|g \-i.bak \/etc/yum.repos.d/CentOS-*.repo# 对于CentOS 9
cat EOF /etc/yum.repos.d/centos.repo
[baseos]
nameCentOS Stream $releasever - BaseOS
baseurlhttps://mirror.nju.edu.cn/centos-stream/$releasever-stream/BaseOS/$basearch/os
# metalinkhttps://mirrors.centos.org/metalink?repocentos-baseos-$streamarch$basearchprotocolhttps,http
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
gpgcheck1
repo_gpgcheck0
metadata_expire6h
countme1
enabled1[baseos-debuginfo]
nameCentOS Stream $releasever - BaseOS - Debug
baseurlhttps://mirror.nju.edu.cn/centos-stream/$releasever-stream/BaseOS/$basearch/debug/tree/
# metalinkhttps://mirrors.centos.org/metalink?repocentos-baseos-debug-$streamarch$basearchprotocolhttps,http
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
gpgcheck1
repo_gpgcheck0
metadata_expire6h
enabled0[baseos-source]
nameCentOS Stream $releasever - BaseOS - Source
baseurlhttps://mirror.nju.edu.cn/centos-stream/$releasever-stream/BaseOS/source/tree/
# metalinkhttps://mirrors.centos.org/metalink?repocentos-baseos-source-$streamarchsourceprotocolhttps,http
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
gpgcheck1
repo_gpgcheck0
metadata_expire6h
enabled0[appstream]
nameCentOS Stream $releasever - AppStream
baseurlhttps://mirror.nju.edu.cn/centos-stream/$releasever-stream/AppStream/$basearch/os
# metalinkhttps://mirrors.centos.org/metalink?repocentos-appstream-$streamarch$basearchprotocolhttps,http
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
gpgcheck1
repo_gpgcheck0
metadata_expire6h
countme1
enabled1[appstream-debuginfo]
nameCentOS Stream $releasever - AppStream - Debug
baseurlhttps://mirror.nju.edu.cn/centos-stream/$releasever-stream/AppStream/$basearch/debug/tree/
# metalinkhttps://mirrors.centos.org/metalink?repocentos-appstream-debug-$streamarch$basearchprotocolhttps,http
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
gpgcheck1
repo_gpgcheck0
metadata_expire6h
enabled0[appstream-source]
nameCentOS Stream $releasever - AppStream - Source
baseurlhttps://mirror.nju.edu.cn/centos-stream/$releasever-stream/AppStream/source/tree/
# metalinkhttps://mirrors.centos.org/metalink?repocentos-appstream-source-$streamarchsourceprotocolhttps,http
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
gpgcheck1
repo_gpgcheck0
metadata_expire6h
enabled0[crb]
nameCentOS Stream $releasever - CRB
baseurlhttps://mirror.nju.edu.cn/centos-stream/$releasever-stream/CRB/$basearch/os
# metalinkhttps://mirrors.centos.org/metalink?repocentos-crb-$streamarch$basearchprotocolhttps,http
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
gpgcheck1
repo_gpgcheck0
metadata_expire6h
countme1
enabled1[crb-debuginfo]
nameCentOS Stream $releasever - CRB - Debug
baseurlhttps://mirror.nju.edu.cn/centos-stream/$releasever-stream/CRB/$basearch/debug/tree/
# metalinkhttps://mirrors.centos.org/metalink?repocentos-crb-debug-$streamarch$basearchprotocolhttps,http
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
gpgcheck1
repo_gpgcheck0
metadata_expire6h
enabled0[crb-source]
nameCentOS Stream $releasever - CRB - Source
baseurlhttps://mirror.nju.edu.cn/centos-stream/$releasever-stream/CRB/source/tree/
# metalinkhttps://mirrors.centos.org/metalink?repocentos-crb-source-$streamarchsourceprotocolhttps,http
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
gpgcheck1
repo_gpgcheck0
metadata_expire6h
enabled0
EOF
cat EOF /etc/yum.repos.d/centos-addons.repo
[highavailability]
nameCentOS Stream $releasever - HighAvailability
baseurlhttps://mirror.nju.edu.cn/centos-stream/$releasever-stream/HighAvailability/$basearch/os
# metalinkhttps://mirrors.centos.org/metalink?repocentos-highavailability-$streamarch$basearchprotocolhttps,http
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
gpgcheck1
repo_gpgcheck0
metadata_expire6h
countme1
enabled0[highavailability-debuginfo]
nameCentOS Stream $releasever - HighAvailability - Debug
baseurlhttps://mirror.nju.edu.cn/centos-stream/$releasever-stream/HighAvailability/$basearch/debug/tree/
# metalinkhttps://mirrors.centos.org/metalink?repocentos-highavailability-debug-$streamarch$basearchprotocolhttps,http
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
gpgcheck1
repo_gpgcheck0
metadata_expire6h
enabled0[highavailability-source]
nameCentOS Stream $releasever - HighAvailability - Source
baseurlhttps://mirror.nju.edu.cn/centos-stream/$releasever-stream/HighAvailability/source/tree/
# metalinkhttps://mirrors.centos.org/metalink?repocentos-highavailability-source-$streamarchsourceprotocolhttps,http
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
gpgcheck1
repo_gpgcheck0
metadata_expire6h
enabled0[nfv]
nameCentOS Stream $releasever - NFV
baseurlhttps://mirror.nju.edu.cn/centos-stream/$releasever-stream/NFV/$basearch/os
# metalinkhttps://mirrors.centos.org/metalink?repocentos-nfv-$streamarch$basearchprotocolhttps,http
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
gpgcheck1
repo_gpgcheck0
metadata_expire6h
countme1
enabled0[nfv-debuginfo]
nameCentOS Stream $releasever - NFV - Debug
baseurlhttps://mirror.nju.edu.cn/centos-stream/$releasever-stream/NFV/$basearch/debug/tree/
# metalinkhttps://mirrors.centos.org/metalink?repocentos-nfv-debug-$streamarch$basearchprotocolhttps,http
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
gpgcheck1
repo_gpgcheck0
metadata_expire6h
enabled0[nfv-source]
nameCentOS Stream $releasever - NFV - Source
baseurlhttps://mirror.nju.edu.cn/centos-stream/$releasever-stream/NFV/source/tree/
# metalinkhttps://mirrors.centos.org/metalink?repocentos-nfv-source-$streamarchsourceprotocolhttps,http
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
gpgcheck1
repo_gpgcheck0
metadata_expire6h
enabled0[rt]
nameCentOS Stream $releasever - RT
baseurlhttps://mirror.nju.edu.cn/centos-stream/$releasever-stream/RT/$basearch/os
# metalinkhttps://mirrors.centos.org/metalink?repocentos-rt-$streamarch$basearchprotocolhttps,http
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
gpgcheck1
repo_gpgcheck0
metadata_expire6h
countme1
enabled0[rt-debuginfo]
nameCentOS Stream $releasever - RT - Debug
baseurlhttps://mirror.nju.edu.cn/centos-stream/$releasever-stream/RT/$basearch/debug/tree/
# metalinkhttps://mirrors.centos.org/metalink?repocentos-rt-debug-$streamarch$basearchprotocolhttps,http
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
gpgcheck1
repo_gpgcheck0
metadata_expire6h
enabled0[rt-source]
nameCentOS Stream $releasever - RT - Source
baseurlhttps://mirror.nju.edu.cn/centos-stream/$releasever-stream/RT/source/tree/
# metalinkhttps://mirrors.centos.org/metalink?repocentos-rt-source-$streamarchsourceprotocolhttps,http
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
gpgcheck1
repo_gpgcheck0
metadata_expire6h
enabled0[resilientstorage]
nameCentOS Stream $releasever - ResilientStorage
baseurlhttps://mirror.nju.edu.cn/centos-stream/$releasever-stream/ResilientStorage/$basearch/os
# metalinkhttps://mirrors.centos.org/metalink?repocentos-resilientstorage-$streamarch$basearchprotocolhttps,http
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
gpgcheck1
repo_gpgcheck0
metadata_expire6h
countme1
enabled0[resilientstorage-debuginfo]
nameCentOS Stream $releasever - ResilientStorage - Debug
baseurlhttps://mirror.nju.edu.cn/centos-stream/$releasever-stream/ResilientStorage/$basearch/debug/tree/
# metalinkhttps://mirrors.centos.org/metalink?repocentos-resilientstorage-debug-$streamarch$basearchprotocolhttps,http
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
gpgcheck1
repo_gpgcheck0
metadata_expire6h
enabled0[resilientstorage-source]
nameCentOS Stream $releasever - ResilientStorage - Source
baseurlhttps://mirror.nju.edu.cn/centos-stream/$releasever-stream/ResilientStorage/source/tree/
# metalinkhttps://mirrors.centos.org/metalink?repocentos-resilientstorage-source-$streamarchsourceprotocolhttps,http
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
gpgcheck1
repo_gpgcheck0
metadata_expire6h
enabled0[extras-common]
nameCentOS Stream $releasever - Extras packages
baseurlhttps://mirror.nju.edu.cn/centos-stream/SIGs/$releasever-stream/extras/$basearch/extras-common
# metalinkhttps://mirrors.centos.org/metalink?repocentos-extras-sig-extras-common-$streamarch$basearchprotocolhttps,http
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Extras-SHA512
gpgcheck1
repo_gpgcheck0
metadata_expire6h
countme1
enabled1[extras-common-source]
nameCentOS Stream $releasever - Extras packages - Source
baseurlhttps://mirror.nju.edu.cn/centos-stream/SIGs/$releasever-stream/extras/source/extras-common
# metalinkhttps://mirrors.centos.org/metalink?repocentos-extras-sig-extras-common-source-$streamarchsourceprotocolhttps,http
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Extras-SHA512
gpgcheck1
repo_gpgcheck0
metadata_expire6h
enabled0
EOF 1.5.安装一些必备工具 # 对于 Ubuntu
apt update apt upgrade -y apt install -y wget psmisc vim net-tools nfs-kernel-server telnet lvm2 git tar curl# 对于 CentOS 7
yum update -y yum -y install wget psmisc vim net-tools nfs-utils telnet yum-utils device-mapper-persistent-data lvm2 git tar curl# 对于 CentOS 8
yum update -y yum -y install wget psmisc vim net-tools nfs-utils telnet yum-utils device-mapper-persistent-data lvm2 git network-scripts tar curl# 对于 CentOS 9
yum update -y yum -y install wget psmisc vim net-tools nfs-utils telnet yum-utils device-mapper-persistent-data lvm2 git tar curl 1.5.1 下载离线所需文件(可选) 在互联网服务器上安装一个一模一样的系统进行下载所需包 CentOS7 # 下载必要工具
yum -y install createrepo yum-utils wget epel*# 下载全量依赖包
repotrack createrepo wget psmisc vim net-tools nfs-utils telnet yum-utils device-mapper-persistent-data lvm2 git tar curl gcc keepalived haproxy bash-completion chrony sshpass ipvsadm ipset sysstat conntrack libseccomp# 删除libseccomp
rm -rf libseccomp-*.rpm# 下载libseccomp
wget http://rpmfind.net/linux/centos/8-stream/BaseOS/x86_64/os/Packages/libseccomp-2.5.1-1.el8.x86_64.rpm# 创建yum源信息
createrepo -u -d /data/centos7/# 拷贝包到内网机器上
scp -r /data/centos7/ root192.168.1.41:
scp -r /data/centos7/ root192.168.1.42:
scp -r /data/centos7/ root192.168.1.43:
scp -r /data/centos7/ root192.168.1.44:
scp -r /data/centos7/ root192.168.1.45:# 在内网机器上创建repo配置文件
rm -rf /etc/yum.repos.d/*
cat /etc/yum.repos.d/123.repo EOF
[cby]
nameCentOS-$releasever - Media
baseurlfile:///root/centos7/
gpgcheck0
enabled1
EOF# 安装下载好的包
yum clean all
yum makecache
yum install /root/centos7/* --skip-broken -y#### 备注 #####
# 安装完成后可能还会出现yum无法使用那么再次执行
rm -rf /etc/yum.repos.d/*
cat /etc/yum.repos.d/123.repo EOF
[cby]
nameCentOS-$releasever - Media
baseurlfile:///root/centos7/
gpgcheck0
enabled1
EOF
yum clean all
yum makecache
yum install /root/centos7/*.rpm --skip-broken -y#### 备注 #####
# 安装 chrony 和 libseccomp
# yum install /root/centos7/libseccomp-2.5.1*.rpm -y
# yum install /root/centos7/chrony-*.rpm -y CentOS8 # 下载必要工具
yum -y install createrepo yum-utils wget epel*# 下载全量依赖包
repotrack wget psmisc vim net-tools nfs-utils telnet yum-utils device-mapper-persistent-data lvm2 git network-scripts tar curl gcc keepalived haproxy bash-completion chrony sshpass ipvsadm ipset sysstat conntrack libseccomp# 创建yum源信息
createrepo -u -d /data/centos8/# 拷贝包到内网机器上
scp -r centos8/ root192.168.1.41:
scp -r centos8/ root192.168.1.42:
scp -r centos8/ root192.168.1.43:
scp -r centos8/ root192.168.1.44:
scp -r centos8/ root192.168.1.45:# 在内网机器上创建repo配置文件
rm -rf /etc/yum.repos.d/*
cat /etc/yum.repos.d/123.repo EOF
[cby]
nameCentOS-$releasever - Media
baseurlfile:///root/centos8/
gpgcheck0
enabled1
EOF# 安装下载好的包
yum clean all
yum makecache
yum install /root/centos8/* --skip-broken -y#### 备注 #####
# 安装完成后可能还会出现yum无法使用那么再次执行
rm -rf /etc/yum.repos.d/*
cat /etc/yum.repos.d/123.repo EOF
[cby]
nameCentOS-$releasever - Media
baseurlfile:///root/centos8/
gpgcheck0
enabled1
EOF
yum clean all
yum makecache
yum install /root/centos8/*.rpm --skip-broken -y CentOS9 # 下载必要工具
yum -y install createrepo yum-utils wget epel*# 下载全量依赖包
repotrack wget psmisc vim net-tools nfs-utils telnet yum-utils device-mapper-persistent-data lvm2 git tar curl gcc keepalived haproxy bash-completion chrony sshpass ipvsadm ipset sysstat conntrack libseccomp# 创建yum源信息
createrepo -u -d centos9/# 拷贝包到内网机器上
scp -r centos9/ root192.168.1.41:
scp -r centos9/ root192.168.1.42:
scp -r centos9/ root192.168.1.43:
scp -r centos9/ root192.168.1.44:
scp -r centos9/ root192.168.1.45:# 在内网机器上创建repo配置文件
rm -rf /etc/yum.repos.d/*
cat /etc/yum.repos.d/123.repo EOF
[cby]
nameCentOS-$releasever - Media
baseurlfile:///root/centos9/
gpgcheck0
enabled1
EOF# 安装下载好的包
yum clean all
yum makecache
yum install /root/centos9/*.rpm --skip-broken -y Ubuntu 下载包和依赖 #!/bin/bashlogfile123.log
ret
function getDepends()
{echo fileName is $1$logfile# use tr to del retapt-cache depends $1|grep Depends |cut -d: -f2 |tr -d echo $ret|tee -a $logfile
}
# 需要获取其所依赖包的包
libswget psmisc vim net-tools nfs-kernel-server telnet lvm2 git tar curl gcc keepalived haproxy bash-completion chrony sshpass ipvsadm ipset sysstat conntrack libseccomp# download libs dependen. deep in 3
i0
while [ $i -lt 3 ] ;
dolet iecho $i# download libsnewlist for j in $libsdoadded$(getDepends $j)newlist$newlist $addedapt install $added --reinstall -d -ydonelibs$newlist
done# 创建源信息
apt install dpkg-dev
sudo cp /var/cache/apt/archives/*.deb /data/ubuntu/ -r
dpkg-scanpackages . /dev/null |gzip /data/ubuntu/Packages.gz -r# 拷贝包到内网机器上
scp -r ubuntu/ root192.168.1.41:
scp -r ubuntu/ root192.168.1.42:
scp -r ubuntu/ root192.168.1.43:
scp -r ubuntu/ root192.168.1.44:
scp -r ubuntu/ root192.168.1.45:# 在内网机器上配置apt源
vim /etc/apt/sources.list
cat /etc/apt/sources.list
deb file:root/ ubuntu/# 安装deb包
apt install ./*.deb 1.6.选择性下载需要工具 #!/bin/bash# 查看版本地址
#
# https://github.com/containernetworking/plugins/releases/
# https://github.com/containerd/containerd/releases/
# https://github.com/kubernetes-sigs/cri-tools/releases/
# https://github.com/Mirantis/cri-dockerd/releases/
# https://github.com/etcd-io/etcd/releases/
# https://github.com/cloudflare/cfssl/releases/
# https://github.com/kubernetes/kubernetes/tree/master/CHANGELOG
# https://download.docker.com/linux/static/stable/x86_64/
# https://github.com/opencontainers/runc/releases/
# https://mirrors.tuna.tsinghua.edu.cn/elrepo/kernel/el7/x86_64/RPMS/
# https://github.com/helm/helm/tags
# http://nginx.org/download/# Version numbers
cni_plugins_versionv1.5.0
cri_containerd_cni_version1.7.17
crictl_versionv1.30.0
cri_dockerd_version0.3.14
etcd_versionv3.5.13
cfssl_version1.6.5
kubernetes_server_version1.30.1
docker_version26.1.3
runc_version1.1.12
kernel_version5.4.268
helm_version3.15.1
nginx_version1.26.0# URLs
base_urlhttps://mirrors.chenby.cn/https://github.com
kernel_urlhttp://mirrors.tuna.tsinghua.edu.cn/elrepo/kernel/el7/x86_64/RPMS/kernel-lt-${kernel_version}-1.el7.elrepo.x86_64.rpm
runc_url${base_url}/opencontainers/runc/releases/download/v${runc_version}/runc.amd64
docker_urlhttps://mirrors.ustc.edu.cn/docker-ce/linux/static/stable/x86_64/docker-${docker_version}.tgz
cni_plugins_url${base_url}/containernetworking/plugins/releases/download/${cni_plugins_version}/cni-plugins-linux-amd64-${cni_plugins_version}.tgz
cri_containerd_cni_url${base_url}/containerd/containerd/releases/download/v${cri_containerd_cni_version}/cri-containerd-cni-${cri_containerd_cni_version}-linux-amd64.tar.gz
crictl_url${base_url}/kubernetes-sigs/cri-tools/releases/download/${crictl_version}/crictl-${crictl_version}-linux-amd64.tar.gz
cri_dockerd_url${base_url}/Mirantis/cri-dockerd/releases/download/v${cri_dockerd_version}/cri-dockerd-${cri_dockerd_version}.amd64.tgz
etcd_url${base_url}/etcd-io/etcd/releases/download/${etcd_version}/etcd-${etcd_version}-linux-amd64.tar.gz
cfssl_url${base_url}/cloudflare/cfssl/releases/download/v${cfssl_version}/cfssl_${cfssl_version}_linux_amd64
cfssljson_url${base_url}/cloudflare/cfssl/releases/download/v${cfssl_version}/cfssljson_${cfssl_version}_linux_amd64
helm_urlhttps://mirrors.huaweicloud.com/helm/v${helm_version}/helm-v${helm_version}-linux-amd64.tar.gz
kubernetes_server_urlhttps://storage.googleapis.com/kubernetes-release/release/v${kubernetes_server_version}/kubernetes-server-linux-amd64.tar.gz
nginx_urlhttp://nginx.org/download/nginx-${nginx_version}.tar.gz# Download packages
packages(# $kernel_url$runc_url$docker_url$cni_plugins_url$cri_containerd_cni_url$crictl_url$cri_dockerd_url$etcd_url$cfssl_url$cfssljson_url$helm_url$kubernetes_server_url$nginx_url
)for package_url in ${packages[]}; dofilename$(basename $package_url)if curl --parallel --parallel-immediate -k -L -C - -o $filename $package_url; thenecho Downloaded $filenameelseecho Failed to download $filenameexit 1fi
done 1.7.关闭防火墙 # Ubuntu忽略CentOS执行
systemctl disable --now firewalld 1.8.关闭SELinux # Ubuntu忽略CentOS执行
setenforce 0
sed -i s#SELINUXenforcing#SELINUXdisabled#g /etc/selinux/config# 参数解释
#
# setenforce 0
# 此命令用于设置 SELinux 的执行模式。0 表示关闭 SELinux。
#
# sed -i s#SELINUXenforcing#SELINUXdisabled#g /etc/selinux/config
# 该命令使用 sed 工具来编辑 /etc/selinux/config 文件。其中 -i 参数表示直接修改原文件而不是输出到终端或另一个文件。s#SELINUXenforcing#SELINUXdisabled#g 是 sed 的替换命令它将文件中所有的 SELINUXenforcing 替换为 SELINUXdisabled。这里的 # 是分隔符用于替代传统的 / 分隔符以避免与路径中的 / 冲突。 1.9.关闭交换分区 sed -ri s/.*swap.*/#/ /etc/fstab
swapoff -a sysctl -w vm.swappiness0cat /etc/fstab
# /dev/mapper/centos-swap swap swap defaults 0 0# 参数解释
#
# -ri: 这个参数用于在原文件中替换匹配的模式。-r表示扩展正则表达式-i允许直接修改文件。
# s/.*swap.*/#/: 这是一个sed命令用于在文件/etc/fstab中找到包含swap的行并在行首添加#来注释掉该行。
# /etc/fstab: 这是一个文件路径即/etc/fstab文件用于存储文件系统表。
# swapoff -a: 这个命令用于关闭所有启用的交换分区。
# sysctl -w vm.swappiness0: 这个命令用于修改vm.swappiness参数的值为0表示系统在物理内存充足时更倾向于使用物理内存而非交换分区。 1.10.网络配置俩种方式二选一 # Ubuntu忽略CentOS执行CentOS9不支持方式一# 方式一
# systemctl disable --now NetworkManager
# systemctl start network systemctl enable network# 方式二
cat /etc/NetworkManager/conf.d/calico.conf EOF
[keyfile]
unmanaged-devicesinterface-name:cali*;interface-name:tunl*
EOF
systemctl restart NetworkManager# 参数解释
#
# 这个参数用于指定不由 NetworkManager 管理的设备。它由以下两个部分组成
#
# interface-name:cali*
# 表示以 cali 开头的接口名称被排除在 NetworkManager 管理之外。例如cali0, cali1 等接口不受 NetworkManager 管理。
#
# interface-name:tunl*
# 表示以 tunl 开头的接口名称被排除在 NetworkManager 管理之外。例如tunl0, tunl1 等接口不受 NetworkManager 管理。
#
# 通过使用这个参数可以将特定的接口排除在 NetworkManager 的管理范围之外以便其他工具或进程可以独立地管理和配置这些接口。 1.11.进行时间同步 # 服务端
# apt install chrony -y
yum install chrony -y
cat /etc/chrony.conf EOF
pool ntp.aliyun.com iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
allow 192.168.1.0/24
local stratum 10
keyfile /etc/chrony.keys
leapsectz right/UTC
logdir /var/log/chrony
EOFsystemctl restart chronyd ; systemctl enable chronyd# 客户端
# apt install chrony -y
yum install chrony -y
cat /etc/chrony.conf EOF
pool 192.168.1.41 iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
keyfile /etc/chrony.keys
leapsectz right/UTC
logdir /var/log/chrony
EOFsystemctl restart chronyd ; systemctl enable chronyd#使用客户端进行验证
chronyc sources -v# 参数解释
#
# pool ntp.aliyun.com iburst
# 指定使用ntp.aliyun.com作为时间服务器池iburst选项表示在初始同步时会发送多个请求以加快同步速度。
#
# driftfile /var/lib/chrony/drift
# 指定用于保存时钟漂移信息的文件路径。
#
# makestep 1.0 3
# 设置当系统时间与服务器时间偏差大于1秒时会以1秒的步长进行调整。如果偏差超过3秒则立即进行时间调整。
#
# rtcsync
# 启用硬件时钟同步功能可以提高时钟的准确性。
#
# allow 192.168.0.0/24
# 允许192.168.0.0/24网段范围内的主机与chrony进行时间同步。
#
# local stratum 10
# 将本地时钟设为stratum 10stratum值表示时钟的准确度值越小表示准确度越高。
#
# keyfile /etc/chrony.keys
# 指定使用的密钥文件路径用于对时间同步进行身份验证。
#
# leapsectz right/UTC
# 指定时区为UTC。
#
# logdir /var/log/chrony
# 指定日志文件存放目录。 1.12.配置ulimit ulimit -SHn 65535
cat /etc/security/limits.conf EOF
* soft nofile 655360
* hard nofile 131072
* soft nproc 655350
* hard nproc 655350
* seft memlock unlimited
* hard memlock unlimitedd
EOF# 参数解释
#
# soft nofile 655360
# soft表示软限制nofile表示一个进程可打开的最大文件数默认值为1024。这里的软限制设置为655360即一个进程可打开的最大文件数为655360。
#
# hard nofile 131072
# hard表示硬限制即系统设置的最大值。nofile表示一个进程可打开的最大文件数默认值为4096。这里的硬限制设置为131072即系统设置的最大文件数为131072。
#
# soft nproc 655350
# soft表示软限制nproc表示一个用户可创建的最大进程数默认值为30720。这里的软限制设置为655350即一个用户可创建的最大进程数为655350。
#
# hard nproc 655350
# hard表示硬限制即系统设置的最大值。nproc表示一个用户可创建的最大进程数默认值为4096。这里的硬限制设置为655350即系统设置的最大进程数为655350。
#
# seft memlock unlimited
# seft表示软限制memlock表示一个进程可锁定在RAM中的最大内存默认值为64 KB。这里的软限制设置为unlimited即一个进程可锁定的最大内存为无限制。
#
# hard memlock unlimited
# hard表示硬限制即系统设置的最大值。memlock表示一个进程可锁定在RAM中的最大内存默认值为64 KB。这里的硬限制设置为unlimited即系统设置的最大内存锁定为无限制。 1.13.配置免密登录 # apt install -y sshpass
yum install -y sshpass
ssh-keygen -f /root/.ssh/id_rsa -P
export IP192.168.1.41 192.168.1.42 192.168.1.43 192.168.1.44 192.168.1.45
export SSHPASS123123
for HOST in $IP;dosshpass -e ssh-copy-id -o StrictHostKeyCheckingno $HOST
done# 这段脚本的作用是在一台机器上安装sshpass工具并通过sshpass自动将本机的SSH公钥复制到多个远程主机上以实现无需手动输入密码的SSH登录。
#
# 具体解释如下
#
# 1. apt install -y sshpass 或 yum install -y sshpass通过包管理器apt或yum安装sshpass工具使得后续可以使用sshpass命令。
#
# 2. ssh-keygen -f /root/.ssh/id_rsa -P 生成SSH密钥对。该命令会在/root/.ssh目录下生成私钥文件id_rsa和公钥文件id_rsa.pub同时不设置密码即-P参数后面为空方便后续通过ssh-copy-id命令自动复制公钥。
#
# 3. export IP192.168.1.41 192.168.1.42 192.168.1.43 192.168.1.44 192.168.1.45设置一个包含多个远程主机IP地址的环境变量IP用空格分隔开表示要将SSH公钥复制到这些远程主机上。
#
# 4. export SSHPASS123123设置环境变量SSHPASS将sshpass所需的SSH密码在这里是123123赋值给它这样sshpass命令可以自动使用这个密码进行登录。
#
# 5. for HOST in $IP;do遍历环境变量IP中的每个IP地址并将当前IP地址赋值给变量HOST。
#
# 6. sshpass -e ssh-copy-id -o StrictHostKeyCheckingno $HOST使用sshpass工具复制本机的SSH公钥到远程主机。其中-e选项表示使用环境变量中的密码即SSHPASS进行登录-o StrictHostKeyCheckingno选项表示连接时不检查远程主机的公钥以避免交互式确认。
#
# 通过这段脚本可以方便地将本机的SSH公钥复制到多个远程主机上实现无需手动输入密码的SSH登录。 1.14.添加启用源 # Ubuntu忽略CentOS执行# 为 RHEL-8或 CentOS-8配置源
yum install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm -y
sed -i smirrorlist#mirrorlistg /etc/yum.repos.d/elrepo.repo
sed -i selrepo.org/linuxmirrors.tuna.tsinghua.edu.cn/elrepog /etc/yum.repos.d/elrepo.repo # 为 RHEL-7 SL-7 或 CentOS-7 安装 ELRepo
yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm -y
sed -i smirrorlist#mirrorlistg /etc/yum.repos.d/elrepo.repo
sed -i selrepo.org/linuxmirrors.tuna.tsinghua.edu.cn/elrepog /etc/yum.repos.d/elrepo.repo # 查看可用安装包
yum --disablerepo* --enablerepoelrepo-kernel list available 1.15.升级内核至4.18版本以上 # Ubuntu忽略CentOS执行# 安装最新的内核
# 我这里选择的是稳定版kernel-ml 如需更新长期维护版本kernel-lt
yum -y --enablerepoelrepo-kernel install kernel-ml# 查看已安装那些内核
rpm -qa | grep kernel# 查看默认内核
grubby --default-kernel# 若不是最新的使用命令设置
grubby --set-default $(ls /boot/vmlinuz-* | grep elrepo)# 重启生效
reboot# v8 整合命令为
yum install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm -y ; sed -i smirrorlist#mirrorlistg /etc/yum.repos.d/elrepo.repo ; sed -i selrepo.org/linuxmirrors.tuna.tsinghua.edu.cn/elrepog /etc/yum.repos.d/elrepo.repo ; yum --disablerepo* --enablerepoelrepo-kernel list available -y ; yum --enablerepoelrepo-kernel install kernel-lt -y ; grubby --default-kernel ; reboot # v7 整合命令为
yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm -y ; sed -i smirrorlist#mirrorlistg /etc/yum.repos.d/elrepo.repo ; sed -i selrepo.org/linuxmirrors.tuna.tsinghua.edu.cn/elrepog /etc/yum.repos.d/elrepo.repo ; yum --disablerepo* --enablerepoelrepo-kernel list available -y ; yum --enablerepoelrepo-kernel install kernel-lt -y ; grubby --set-default $(ls /boot/vmlinuz-* | grep elrepo) ; grubby --default-kernel ; reboot # 离线版本
yum install -y /root/cby/kernel-lt-*-1.el7.elrepo.x86_64.rpm ; grubby --set-default $(ls /boot/vmlinuz-* | grep elrepo) ; grubby --default-kernel ; reboot 1.16.安装ipvsadm # 对于CentOS7离线安装
# yum install /root/centos7/ipset-*.el7.x86_64.rpm /root/centos7/lm_sensors-libs-*.el7.x86_64.rpm /root/centos7/ipset-libs-*.el7.x86_64.rpm /root/centos7/sysstat-*.el7_9.x86_64.rpm /root/centos7/ipvsadm-*.el7.x86_64.rpm -y# 对于 Ubuntu
# apt install ipvsadm ipset sysstat conntrack -y# 对于 CentOS
yum install ipvsadm ipset sysstat conntrack libseccomp -y
cat /etc/modules-load.d/ipvs.conf EOF
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
EOFsystemctl restart systemd-modules-load.servicelsmod | grep -e ip_vs -e nf_conntrack
ip_vs_sh 16384 0
ip_vs_wrr 16384 0
ip_vs_rr 16384 0
ip_vs 237568 6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack 217088 3 nf_nat,nft_ct,ip_vs
nf_defrag_ipv6 24576 2 nf_conntrack,ip_vs
nf_defrag_ipv4 16384 1 nf_conntrack
libcrc32c 16384 5 nf_conntrack,nf_nat,nf_tables,xfs,ip_vs# 参数解释
#
# ip_vs
# IPVS 是 Linux 内核中的一个模块用于实现负载均衡和高可用性。它通过在前端代理服务器上分发传入请求到后端实际服务器上提供了高性能和可扩展的网络服务。
#
# ip_vs_rr
# IPVS 的一种调度算法之一使用轮询方式分发请求到后端服务器每个请求按顺序依次分发。
#
# ip_vs_wrr
# IPVS 的一种调度算法之一使用加权轮询方式分发请求到后端服务器每个请求按照指定的权重比例分发。
#
# ip_vs_sh
# IPVS 的一种调度算法之一使用哈希方式根据源 IP 地址和目标 IP 地址来分发请求。
#
# nf_conntrack
# 这是一个内核模块用于跟踪和管理网络连接包括 TCP、UDP 和 ICMP 等协议。它是实现防火墙状态跟踪的基础。
#
# ip_tables
# 这是一个内核模块提供了对 Linux 系统 IP 数据包过滤和网络地址转换NAT功能的支持。
#
# ip_set
# 这是一个内核模块扩展了 iptables 的功能支持更高效的 IP 地址集合操作。
#
# xt_set
# 这是一个内核模块扩展了 iptables 的功能支持更高效的数据包匹配和操作。
#
# ipt_set
# 这是一个用户空间工具用于配置和管理 xt_set 内核模块。
#
# ipt_rpfilter
# 这是一个内核模块用于实现反向路径过滤用于防止 IP 欺骗和 DDoS 攻击。
#
# ipt_REJECT
# 这是一个 iptables 目标用于拒绝 IP 数据包并向发送方发送响应指示数据包被拒绝。
#
# ipip
# 这是一个内核模块用于实现 IP 封装在 IPIP-over-IP的隧道功能。它可以在不同网络之间创建虚拟隧道来传输 IP 数据包。 1.17.修改内核参数 cat EOF /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward 1
net.bridge.bridge-nf-call-iptables 1
fs.may_detach_mounts 1
vm.overcommit_memory1
vm.panic_on_oom0
fs.inotify.max_user_watches89100
fs.file-max52706963
fs.nr_open52706963
net.netfilter.nf_conntrack_max2310720net.ipv4.tcp_keepalive_time 600
net.ipv4.tcp_keepalive_probes 3
net.ipv4.tcp_keepalive_intvl 15
net.ipv4.tcp_max_tw_buckets 36000
net.ipv4.tcp_tw_reuse 1
net.ipv4.tcp_max_orphans 327680
net.ipv4.tcp_orphan_retries 3
net.ipv4.tcp_syncookies 1
net.ipv4.tcp_max_syn_backlog 16384
net.ipv4.ip_conntrack_max 65536
net.ipv4.tcp_max_syn_backlog 16384
net.ipv4.tcp_timestamps 0
net.core.somaxconn 16384net.ipv6.conf.all.disable_ipv6 0
net.ipv6.conf.default.disable_ipv6 0
net.ipv6.conf.lo.disable_ipv6 0
net.ipv6.conf.all.forwarding 1
EOFsysctl --system# 这些是Linux系统的一些参数设置用于配置和优化网络、文件系统和虚拟内存等方面的功能。以下是每个参数的详细解释
#
# 1. net.ipv4.ip_forward 1
# - 这个参数启用了IPv4的IP转发功能允许服务器作为网络路由器转发数据包。
#
# 2. net.bridge.bridge-nf-call-iptables 1
# - 当使用网络桥接技术时将数据包传递到iptables进行处理。
#
# 3. fs.may_detach_mounts 1
# - 允许在挂载文件系统时允许被其他进程使用。
#
# 4. vm.overcommit_memory1
# - 该设置允许原始的内存过量分配策略当系统的内存已经被完全使用时系统仍然会分配额外的内存。
#
# 5. vm.panic_on_oom0
# - 当系统内存不足OOM时禁用系统崩溃和重启。
#
# 6. fs.inotify.max_user_watches89100
# - 设置系统允许一个用户的inotify实例可以监控的文件数目的上限。
#
# 7. fs.file-max52706963
# - 设置系统同时打开的文件数的上限。
#
# 8. fs.nr_open52706963
# - 设置系统同时打开的文件描述符数的上限。
#
# 9. net.netfilter.nf_conntrack_max2310720
# - 设置系统可以创建的网络连接跟踪表项的最大数量。
#
# 10. net.ipv4.tcp_keepalive_time 600
# - 设置TCP套接字的空闲超时时间秒超过该时间没有活动数据时内核会发送心跳包。
#
# 11. net.ipv4.tcp_keepalive_probes 3
# - 设置未收到响应的TCP心跳探测次数。
#
# 12. net.ipv4.tcp_keepalive_intvl 15
# - 设置TCP心跳探测的时间间隔秒。
#
# 13. net.ipv4.tcp_max_tw_buckets 36000
# - 设置系统可以使用的TIME_WAIT套接字的最大数量。
#
# 14. net.ipv4.tcp_tw_reuse 1
# - 启用TIME_WAIT套接字的重新利用允许新的套接字使用旧的TIME_WAIT套接字。
#
# 15. net.ipv4.tcp_max_orphans 327680
# - 设置系统可以同时存在的TCP套接字垃圾回收包裹数的最大数量。
#
# 16. net.ipv4.tcp_orphan_retries 3
# - 设置系统对于孤立的TCP套接字的重试次数。
#
# 17. net.ipv4.tcp_syncookies 1
# - 启用TCP SYN cookies保护用于防止SYN洪泛攻击。
#
# 18. net.ipv4.tcp_max_syn_backlog 16384
# - 设置新的TCP连接的半连接数半连接队列的最大长度。
#
# 19. net.ipv4.ip_conntrack_max 65536
# - 设置系统可以创建的网络连接跟踪表项的最大数量。
#
# 20. net.ipv4.tcp_timestamps 0
# - 关闭TCP时间戳功能用于提供更好的安全性。
#
# 21. net.core.somaxconn 16384
# - 设置系统核心层的连接队列的最大值。
#
# 22. net.ipv6.conf.all.disable_ipv6 0
# - 启用IPv6协议。
#
# 23. net.ipv6.conf.default.disable_ipv6 0
# - 启用IPv6协议。
#
# 24. net.ipv6.conf.lo.disable_ipv6 0
# - 启用IPv6协议。
#
# 25. net.ipv6.conf.all.forwarding 1
# - 允许IPv6数据包转发。 1.18.所有节点配置hosts本地解析 cat /etc/hosts EOF
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.1.41 k8s-master01
192.168.1.42 k8s-master02
192.168.1.43 k8s-master03
192.168.1.44 k8s-node01
192.168.1.45 k8s-node02
192.168.1.46 lb-vip
EOF 2.k8s基本组件安装 注意 2.1 和 2.2 二选其一即可 2.1.安装Containerd作为Runtime 推荐 # https://github.com/containernetworking/plugins/releases/
# wget https://mirrors.chenby.cn/https://github.com/containernetworking/plugins/releases/download/v1.4.0/cni-plugins-linux-amd64-v1.4.0.tgzcd cby/#创建cni插件所需目录
mkdir -p /etc/cni/net.d /opt/cni/bin
#解压cni二进制包
tar xf cni-plugins-linux-amd64-v*.tgz -C /opt/cni/bin/# https://github.com/containerd/containerd/releases/
# wget https://mirrors.chenby.cn/https://github.com/containerd/containerd/releases/download/v1.7.13/cri-containerd-cni-1.7.13-linux-amd64.tar.gz#解压
tar -xzf cri-containerd-cni-*-linux-amd64.tar.gz -C /#创建服务启动文件
cat /etc/systemd/system/containerd.service EOF
[Unit]
Descriptioncontainerd container runtime
Documentationhttps://containerd.io
Afternetwork.target local-fs.target[Service]
ExecStartPre-/sbin/modprobe overlay
ExecStart/usr/local/bin/containerd
Typenotify
Delegateyes
KillModeprocess
Restartalways
RestartSec5
LimitNPROCinfinity
LimitCOREinfinity
LimitNOFILEinfinity
TasksMaxinfinity
OOMScoreAdjust-999[Install]
WantedBymulti-user.target
EOF# 参数解释
#
# 这是一个用于启动containerd容器运行时的systemd unit文件。下面是对该文件不同部分的详细解释
#
# [Unit]
# Descriptioncontainerd container runtime
# 描述该unit的作用是作为containerd容器运行时。
#
# Documentationhttps://containerd.io
# 指向容器运行时的文档的URL。
#
# Afternetwork.target local-fs.target
# 定义了在哪些依赖项之后该unit应该被启动。在网络和本地文件系统加载完成后启动确保了容器运行时在这些依赖项可用时才会启动。
#
# [Service]
# ExecStartPre-/sbin/modprobe overlay
# 在启动containerd之前执行的命令。这里的命令是尝试加载内核的overlay模块如果失败则忽略错误继续执行下面的命令。
#
# ExecStart/usr/local/bin/containerd
# 实际执行的命令用于启动containerd容器运行时。
#
# Typenotify
# 指定服务的通知类型。这里使用notify类型表示当服务就绪时会通过通知的方式告知systemd。
#
# Delegateyes
# 允许systemd对此服务进行重启和停止操作。
#
# KillModeprocess
# 在终止容器运行时时使用的kill模式。这里使用process模式表示通过终止进程来停止容器运行时。
#
# Restartalways
# 定义了当容器运行时终止后的重启策略。这里设置为always表示无论何时终止容器运行时都会自动重新启动。
#
# RestartSec5
# 在容器运行时终止后重新启动之前等待的秒数。
#
# LimitNPROCinfinity
# 指定容器运行时可以使用的最大进程数量。这里设置为无限制。
#
# LimitCOREinfinity
# 指定容器运行时可以使用的最大CPU核心数量。这里设置为无限制。
#
# LimitNOFILEinfinity
# 指定容器运行时可以打开的最大文件数。这里设置为无限制。
#
# TasksMaxinfinity
# 指定容器运行时可以创建的最大任务数。这里设置为无限制。
#
# OOMScoreAdjust-999
# 指定容器运行时的OOMOut-Of-Memory分数调整值。负数值表示容器运行时的优先级较高。
#
# [Install]
# WantedBymulti-user.target
# 定义了服务的安装位置。这里指定为multi-user.target表示将服务安装为多用户模式下的启动项。 2.1.1配置Containerd所需的模块 cat EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF# 参数解释
#
# containerd是一个容器运行时用于管理和运行容器。它支持多种不同的参数配置来自定义容器运行时的行为和功能。
#
# 1. overlayoverlay是容器d默认使用的存储驱动它提供了一种轻量级的、可堆叠的、逐层增量的文件系统。它通过在现有文件系统上叠加文件系统层来创建容器的文件系统视图。每个容器可以有自己的一组文件系统层这些层可以共享基础镜像中的文件并在容器内部进行修改。使用overlay可以有效地使用磁盘空间并使容器更加轻量级。
#
# 2. br_netfilterbr_netfilter是Linux内核提供的一个网络过滤器模块用于在容器网络中进行网络过滤和NAT转发。当容器和主机之间的网络通信需要进行DNAT或者SNAT时br_netfilter模块可以将IP地址进行转换。它还可以提供基于iptables规则的网络过滤功能用于限制容器之间或容器与外部网络之间的通信。
#
# 这些参数可以在containerd的配置文件或者命令行中指定。例如可以通过设置--storage-driver参数来选择使用overlay作为存储驱动通过设置--iptables参数来启用或禁用br_netfilter模块。具体的使用方法和配置细节可以参考containerd的官方文档。 2.1.2加载模块 systemctl restart systemd-modules-load.service# 参数解释
# - systemctl: 是Linux系统管理服务的命令行工具可以管理systemd init系统。
# - restart: 是systemctl命令的一个选项用于重新启动服务。
# - systemd-modules-load.service: 是一个系统服务用于加载内核模块。
#
# 将上述参数结合在一起来解释systemctl restart systemd-modules-load.service的含义
# 这个命令用于重新启动系统服务systemd-modules-load.service它是负责加载内核模块的服务。在重新启动该服务后系统会重新加载所有的内核模块。 2.1.3配置Containerd所需的内核 cat EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables 1
net.ipv4.ip_forward 1
net.bridge.bridge-nf-call-ip6tables 1
EOF# 加载内核
sysctl --system# 参数解释
#
# 这些参数是Linux操作系统中用于网络和网络桥接设置的参数。
#
# - net.bridge.bridge-nf-call-iptables这个参数控制网络桥接设备是否调用iptables规则处理网络数据包。当该参数设置为1时网络数据包将被传递到iptables进行处理当该参数设置为0时网络数据包将绕过iptables直接传递。默认情况下这个参数的值是1即启用iptables规则处理网络数据包。
#
# - net.ipv4.ip_forward这个参数用于控制是否启用IP转发功能。IP转发使得操作系统可以将接收到的数据包从一个网络接口转发到另一个网络接口。当该参数设置为1时启用IP转发功能当该参数设置为0时禁用IP转发功能。在网络环境中通常需要启用IP转发功能来实现不同网络之间的通信。默认情况下这个参数的值是0即禁用IP转发功能。
#
# - net.bridge.bridge-nf-call-ip6tables这个参数与net.bridge.bridge-nf-call-iptables类似但是它用于IPv6数据包的处理。当该参数设置为1时IPv6数据包将被传递到ip6tables进行处理当该参数设置为0时IPv6数据包将绕过ip6tables直接传递。默认情况下这个参数的值是1即启用ip6tables规则处理IPv6数据包。
#
# 这些参数的值可以通过修改操作系统的配置文件通常是/etc/sysctl.conf来进行设置。修改完成后需要使用sysctl -p命令重载配置文件使参数生效。 2.1.4创建Containerd的配置文件 # 参数解释
#
# 这段代码是用于修改并配置containerd的参数。
#
# 1. 首先使用命令mkdir -p /etc/containerd创建/etc/containerd目录如果该目录已存在则不进行任何操作。
# 2. 使用命令containerd config default | tee /etc/containerd/config.toml创建默认配置文件并将输出同时传递给/etc/containerd/config.toml文件。
# 3. 使用sed命令修改/etc/containerd/config.toml文件将SystemdCgroup参数的值从false改为true。-i参数表示直接在原文件中进行编辑。
# 4. 使用cat命令结合grep命令查看/etc/containerd/config.toml文件中SystemdCgroup参数的值是否已修改为true。
# 5. 使用sed命令修改/etc/containerd/config.toml文件将registry.k8s.io的地址替换为m.daocloud.io/registry.k8s.io。-i参数表示直接在原文件中进行编辑。
# 6. 使用cat命令结合grep命令查看/etc/containerd/config.toml文件中sandbox_image参数的值是否已修改为m.daocloud.io/registry.k8s.io。
# 7. 使用sed命令修改/etc/containerd/config.toml文件将config_path参数的值从改为/etc/containerd/certs.d。-i参数表示直接在原文件中进行编辑。
# 8. 使用cat命令结合grep命令查看/etc/containerd/config.toml文件中certs.d参数的值是否已修改为/etc/containerd/certs.d。
# 9. 使用mkdir命令创建/etc/containerd/certs.d/docker.io目录如果目录已存在则不进行任何操作。-p参数表示创建目录时如果父级目录不存在则自动创建父级目录。
#
# 最后使用cat重定向操作符将内容写入/etc/containerd/certs.d/docker.io/hosts.toml文件。该文件会配置加速器其中server参数设置为https://docker.iohost参数设置为https://hub-mirror.c.163.com并添加capabilities参数。# 创建默认配置文件
mkdir -p /etc/containerd
containerd config default | tee /etc/containerd/config.toml# 修改Containerd的配置文件
sed -i s#SystemdCgroup\ \\ false#SystemdCgroup\ \\ true#g /etc/containerd/config.toml
cat /etc/containerd/config.toml | grep SystemdCgroup
sed -i s#registry.k8s.io#k8s.dockerproxy.com#g /etc/containerd/config.toml
cat /etc/containerd/config.toml | grep sandbox_image
sed -i s#config_path\ \\ \\#config_path\ \\ \/etc/containerd/certs.d\#g /etc/containerd/config.toml
cat /etc/containerd/config.toml | grep certs.d# 配置加速器
mkdir /etc/containerd/certs.d/docker.io -pv
cat /etc/containerd/certs.d/docker.io/hosts.toml EOF
server https://docker.io
[host.https://dockerproxy.com]capabilities [pull, resolve]
EOF# 注意
# SystemdCgroup参数是containerd中的一个配置参数用于设置containerd在运行过程中使用的Cgroup控制组路径。Containerd使用SystemdCgroup参数来指定应该使用哪个Cgroup来跟踪和管理容器的资源使用。
#
# Cgroup是Linux内核提供的一种资源隔离和管理机制可以用于限制、分配和监控进程组的资源使用。使用Cgroup可以将容器的资源限制和隔离以防止容器之间的资源争用和不公平的竞争。
#
# 通过设置SystemdCgroup参数可以确保containerd能够找到正确的Cgroup路径并正确地限制和隔离容器的资源使用确保容器可以按照预期的方式运行。如果未正确设置SystemdCgroup参数可能会导致容器无法正确地使用资源或者无法保证资源的公平分配和隔离。
#
# 总而言之SystemdCgroup参数的作用是为了确保containerd能够正确地管理容器的资源使用以实现资源的限制、隔离和公平分配。 2.1.5启动并设置为开机启动 systemctl daemon-reload
# 用于重新加载systemd管理的单位文件。当你新增或修改了某个单位文件如.service文件、.socket文件等需要运行该命令来刷新systemd对该文件的配置。systemctl enable --now containerd.service
# 启用并立即启动docker.service单元。docker.service是Docker守护进程的systemd服务单元。systemctl stop containerd.service
# 停止运行中的docker.service单元即停止Docker守护进程。systemctl start containerd.service
# 启动docker.service单元即启动Docker守护进程。systemctl restart containerd.service
# 重启docker.service单元即重新启动Docker守护进程。systemctl status containerd.service
# 显示docker.service单元的当前状态包括运行状态、是否启用等信息。 2.1.6配置crictl客户端连接的运行时位置 # https://github.com/kubernetes-sigs/cri-tools/releases/
# wget https://mirrors.chenby.cn/https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.29.0/crictl-v1.29.0-linux-amd64.tar.gz#解压
tar xf crictl-v*-linux-amd64.tar.gz -C /usr/bin/
#生成配置文件
cat /etc/crictl.yaml EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF#测试
systemctl restart containerd
crictl info# 注意
# 下面是参数crictl的详细解释
#
# crictl是一个用于与容器运行时通信的命令行工具。它是容器运行时接口CRI工具的一个实现可以对容器运行时进行管理和操作。
#
# 1. runtime-endpoint: unix:///run/containerd/containerd.sock
# 指定容器运行时的终端套接字地址。在这个例子中指定的地址是unix:///run/containerd/containerd.sock这是一个Unix域套接字地址。
#
# 2. image-endpoint: unix:///run/containerd/containerd.sock
# 指定容器镜像服务的终端套接字地址。在这个例子中指定的地址是unix:///run/containerd/containerd.sock这是一个Unix域套接字地址。
#
# 3. timeout: 10
# 设置与容器运行时通信的超时时间单位是秒。在这个例子中超时时间被设置为10秒。
#
# 4. debug: false
# 指定是否开启调式模式。在这个例子中调式模式被设置为关闭即false。如果设置为true则会输出更详细的调试信息。
#
# 这些参数可以根据需要进行修改以便与容器运行时进行有效的通信和管理。 2.2 安装docker作为Runtime 2.2.1 解压docker程序 # 二进制包下载地址https://download.docker.com/linux/static/stable/x86_64/
# wget https://mirrors.ustc.edu.cn/docker-ce/linux/static/stable/x86_64/docker-25.0.3.tgz#解压
tar xf docker-*.tgz
#拷贝二进制文件
cp docker/* /usr/bin/ 2.2.2 创建containerd的service文件 #创建containerd的service文件,并且启动
cat /etc/systemd/system/containerd.service EOF
[Unit]
Descriptioncontainerd container runtime
Documentationhttps://containerd.io
Afternetwork.target local-fs.target[Service]
ExecStartPre-/sbin/modprobe overlay
ExecStart/usr/bin/containerd
Typenotify
Delegateyes
KillModeprocess
Restartalways
RestartSec5
LimitNPROCinfinity
LimitCOREinfinity
LimitNOFILE1048576
TasksMaxinfinity
OOMScoreAdjust-999[Install]
WantedBymulti-user.target
EOF# 参数解释
#
# [Unit]
# - Descriptioncontainerd container runtime指定服务的描述信息。
# - Documentationhttps://containerd.io指定服务的文档链接。
# - Afternetwork.target local-fs.target指定服务的启动顺序在网络和本地文件系统启动之后再启动该服务。
#
# [Service]
# - ExecStartPre-/sbin/modprobe overlay在启动服务之前执行的命令使用-表示忽略错误。
# - ExecStart/usr/bin/containerd指定服务的启动命令。
# - Typenotify指定服务的类型notify表示服务会在启动完成后向systemd发送通知。
# - Delegateyes允许服务代理其他服务的应答例如收到关机命令后终止其他服务。
# - KillModeprocess指定服务终止时的行为process表示终止服务进程。
# - Restartalways指定服务终止后是否自动重启always表示总是自动重启。
# - RestartSec5指定服务重启的时间间隔单位为秒。
# - LimitNPROCinfinity限制服务的最大进程数infinity表示没有限制。
# - LimitCOREinfinity限制服务的最大核心数infinity表示没有限制。
# - LimitNOFILE1048576限制服务的最大文件数指定为1048576。
# - TasksMaxinfinity限制服务的最大任务数infinity表示没有限制。
# - OOMScoreAdjust-999指定服务的OOMOut of Memory得分负数表示降低被终止的概率。
#
# [Install]
# - WantedBymulti-user.target指定服务的安装方式multi-user.target表示该服务在多用户模式下安装。# 设置开机自启
systemctl enable --now containerd.service 2.2.3 准备docker的service文件 #准备docker的service文件
cat /etc/systemd/system/docker.service EOF
[Unit]
DescriptionDocker Application Container Engine
Documentationhttps://docs.docker.com
Afternetwork-online.target firewalld.service cri-docker.service docker.socket containerd.service
Wantsnetwork-online.target
Requiresdocker.socket containerd.service[Service]
Typenotify
ExecStart/usr/bin/dockerd -H fd:// --containerd/run/containerd/containerd.sock
ExecReload/bin/kill -s HUP $MAINPID
TimeoutSec0
RestartSec2
Restartalways
StartLimitBurst3
StartLimitInterval60s
LimitNOFILEinfinity
LimitNPROCinfinity
LimitCOREinfinity
TasksMaxinfinity
Delegateyes
KillModeprocess
OOMScoreAdjust-500[Install]
WantedBymulti-user.target
EOF# 参数解释
#
# [Unit]
# - Description: 描述服务的作用这里是Docker Application Container Engine即Docker应用容器引擎。
# - Documentation: 提供关于此服务的文档链接这里是Docker官方文档链接。
# - After: 说明该服务在哪些其他服务之后启动这里是在网络在线、firewalld服务和containerd服务后启动。
# - Wants: 说明该服务想要的其他服务这里是网络在线服务。
# - Requires: 说明该服务需要的其他服务这里是docker.socket和containerd.service。
#
# [Service]
# - Type: 服务类型这里是notify表示服务在启动完成时发送通知。
# - ExecStart: 命令启动该服务时会执行的命令这里是/usr/bin/dockerd -H fd:// --containerd/run/containerd/containerd.sock即启动dockerd并指定一些参数其中-H指定dockerd的监听地址为fd://--containerd指定containerd的sock文件位置。
# - ExecReload: 重载命令当接收到HUP信号时执行的命令这里是/bin/kill -s HUP $MAINPID即发送HUP信号给主进程ID。
# - TimeoutSec: 服务超时时间这里是0表示没有超时限制。
# - RestartSec: 重启间隔时间这里是2秒表示重启失败后等待2秒再重启。
# - Restart: 重启策略这里是always表示总是重启。
# - StartLimitBurst: 启动限制次数这里是3表示在启动失败后最多重试3次。
# - StartLimitInterval: 启动限制时间间隔这里是60秒表示两次启动之间最少间隔60秒。
# - LimitNOFILE: 文件描述符限制这里是infinity表示没有限制。
# - LimitNPROC: 进程数限制这里是infinity表示没有限制。
# - LimitCORE: 核心转储限制这里是infinity表示没有限制。
# - TasksMax: 最大任务数这里是infinity表示没有限制。
# - Delegate: 修改权限这里是yes表示启用权限修改。
# - KillMode: 杀死模式这里是process表示杀死整个进程组。
# - OOMScoreAdjust: 用于调整进程在系统内存紧张时的优先级调整这里是-500表示将OOM分数降低500。
#
# [Install]
# - WantedBy: 安装目标这里是multi-user.target表示在多用户模式下安装。
# 在WantedBy参数中我们可以使用以下参数
# 1. multi-user.target指定该服务应该在多用户模式下启动。
# 2. graphical.target指定该服务应该在图形化界面模式下启动。
# 3. default.target指定该服务应该在系统的默认目标runlevel下启动。
# 4. rescue.target指定该服务应该在系统救援模式下启动。
# 5. poweroff.target指定该服务应该在关机时启动。
# 6. reboot.target指定该服务应该在重启时启动。
# 7. halt.target指定该服务应该在停止时启动。
# 8. shutdown.target指定该服务应该在系统关闭时启动。
# 这些参数可以根据需要选择一个或多个以告知系统在何时启动该服务。 2.2.4 准备docker的socket文件 #准备docker的socket文件
cat /etc/systemd/system/docker.socket EOF
[Unit]
DescriptionDocker Socket for the API[Socket]
ListenStream/var/run/docker.sock
SocketMode0660
SocketUserroot
SocketGroupdocker[Install]
WantedBysockets.target
EOF# 这是一个用于Docker API的socket配置文件包含了以下参数
#
# [Unit]
# - Description描述了该socket的作用即为Docker API的socket。
#
# [Socket]
# - ListenStream指定了socket的监听地址该socket会监听在/var/run/docker.sock上即Docker守护程序使用的默认sock文件。
# - SocketMode指定了socket文件的权限模式此处为0660即用户和用户组有读写权限其他用户无权限。
# - SocketUser指定了socket文件的所有者此处为root用户。
# - SocketGroup指定了socket文件的所属用户组此处为docker用户组。
#
# [Install]
# - WantedBy指定了该socket被启用时的目标此处为sockets.target表示当sockets.target启动时启用该socket。
#
# 该配置文件的作用是为Docker提供API访问的通道它监听在/var/run/docker.sock上具有root用户权限但只接受docker用户组的成员的连接并且其他用户无法访问。这样只有docker用户组的成员可以通过该socket与Docker守护进程进行通信。 2.2.5 配置加速器 # 配置加速器
mkdir /etc/docker/ -pv
cat /etc/docker/daemon.json EOF
{exec-opts: [native.cgroupdriversystemd],registry-mirrors: [https://dockerproxy.com],max-concurrent-downloads: 10,log-driver: json-file,log-level: warn,log-opts: {max-size: 10m,max-file: 3},data-root: /var/lib/docker
}
EOF# 该参数文件中包含以下参数
#
# 1. exec-opts: 用于设置Docker守护进程的选项native.cgroupdriversystemd表示使用systemd作为Cgroup驱动程序。
# 2. registry-mirrors: 用于指定Docker镜像的镜像注册服务器。在这里有三个镜像注册服务器https://docker.m.daocloud.io、https://docker.mirrors.ustc.edu.cn和http://hub-mirror.c.163.com。
# 3. max-concurrent-downloads: 用于设置同时下载镜像的最大数量默认值为3这里设置为10。
# 4. log-driver: 用于设置Docker守护进程的日志驱动程序这里设置为json-file。
# 5. log-level: 用于设置日志的级别这里设置为warn。
# 6. log-opts: 用于设置日志驱动程序的选项这里有两个选项max-size和max-file。max-size表示每个日志文件的最大大小这里设置为10mmax-file表示保存的最大日志文件数量这里设置为3。
# 7. data-root: 用于设置Docker守护进程的数据存储根目录默认为/var/lib/docker这里设置为/var/lib/docker。 2.2.6 启动docker groupadd docker
#创建docker组systemctl daemon-reload
# 用于重新加载systemd管理的单位文件。当你新增或修改了某个单位文件如.service文件、.socket文件等需要运行该命令来刷新systemd对该文件的配置。systemctl enable --now docker.socket
# 启用并立即启动docker.socket单元。docker.socket是一个systemd的socket单元用于接收来自网络的Docker API请求。systemctl enable --now docker.service
# 启用并立即启动docker.service单元。docker.service是Docker守护进程的systemd服务单元。systemctl stop docker.service
# 停止运行中的docker.service单元即停止Docker守护进程。systemctl start docker.service
# 启动docker.service单元即启动Docker守护进程。systemctl restart docker.service
# 重启docker.service单元即重新启动Docker守护进程。systemctl status docker.service
# 显示docker.service单元的当前状态包括运行状态、是否启用等信息。docker info
#验证 2.2.7 解压cri-docker # 由于1.24以及更高版本不支持docker所以安装cri-docker
# 下载cri-docker
# https://github.com/Mirantis/cri-dockerd/releases/
# wget https://mirrors.chenby.cn/https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.10/cri-dockerd-0.3.10.amd64.tgz# 解压cri-docker
tar xvf cri-dockerd-*.amd64.tgz
cp -r cri-dockerd/ /usr/bin/
chmod x /usr/bin/cri-dockerd/cri-dockerd 2.2.8 写入启动cri-docker配置文件 # 写入启动配置文件
cat /usr/lib/systemd/system/cri-docker.service EOF
[Unit]
DescriptionCRI Interface for Docker Application Container Engine
Documentationhttps://docs.mirantis.com
Afternetwork-online.target firewalld.service docker.service
Wantsnetwork-online.target
Requirescri-docker.socket[Service]
Typenotify
ExecStart/usr/bin/cri-dockerd/cri-dockerd --network-plugincni --pod-infra-container-imageregistry.aliyuncs.com/google_containers/pause:3.7
ExecReload/bin/kill -s HUP $MAINPID
TimeoutSec0
RestartSec2
Restartalways
StartLimitBurst3
StartLimitInterval60s
LimitNOFILEinfinity
LimitNPROCinfinity
LimitCOREinfinity
TasksMaxinfinity
Delegateyes
KillModeprocess[Install]
WantedBymulti-user.target
EOF# [Unit]
# - Description该参数用于描述该单元的功能这里描述的是CRI与Docker应用容器引擎的接口。
# - Documentation该参数指定了相关文档的网址供用户参考。
# - After该参数指定了此单元应该在哪些其他单元之后启动确保在网络在线、防火墙和Docker服务启动之后再启动此单元。
# - Wants该参数指定了此单元希望也启动的所有单元此处是希望在网络在线之后启动。
# - Requires该参数指定了此单元需要依赖的单元此处是cri-docker.socket单元。
#
# [Service]
# - Type该参数指定了服务的类型这里是notify表示当服务启动完成时向系统发送通知。
# - ExecStart该参数指定了将要运行的命令和参数此处是执行/usr/bin/cri-dockerd/cri-dockerd命令并指定了网络插件为cni和Pod基础设施容器的镜像为registry.aliyuncs.com/google_containers/pause:3.7。
# - ExecReload该参数指定在服务重载时运行的命令此处是发送HUP信号给主进程。
# - TimeoutSec该参数指定了服务启动的超时时间此处为0表示无限制。
# - RestartSec该参数指定了自动重启服务的时间间隔此处为2秒。
# - Restart该参数指定了在服务发生错误时自动重启此处是始终重启。
# - StartLimitBurst该参数指定了在给定时间间隔内允许的启动失败次数此处为3次。
# - StartLimitInterval该参数指定启动失败的时间间隔此处为60秒。
# - LimitNOFILE该参数指定了允许打开文件的最大数量此处为无限制。
# - LimitNPROC该参数指定了允许同时运行的最大进程数此处为无限制。
# - LimitCORE该参数指定了允许生成的core文件的最大大小此处为无限制。
# - TasksMax该参数指定了此服务的最大任务数此处为无限制。
# - Delegate该参数指定了是否将控制权委托给指定服务此处为是。
# - KillMode该参数指定了在终止服务时如何处理进程此处是通过终止进程来终止服务。
#
# [Install]
# - WantedBy该参数指定了希望这个单元启动的多用户目标。在这里这个单元希望在multi-user.target启动。 2.2.9 写入cri-docker的socket配置文件 # 写入socket配置文件
cat /usr/lib/systemd/system/cri-docker.socket EOF
[Unit]
DescriptionCRI Docker Socket for the API
PartOfcri-docker.service[Socket]
ListenStream%t/cri-dockerd.sock
SocketMode0660
SocketUserroot
SocketGroupdocker[Install]
WantedBysockets.target
EOF# 该配置文件是用于systemd的单元配置文件(unit file)用于定义一个socket单元。
#
# [Unit]
# - Description表示该单元的描述信息。
# - PartOf表示该单元是cri-docker.service的一部分。
#
# [Socket]
# - ListenStream指定了该socket要监听的地址和端口这里使用了%t占位符表示根据单元的类型来决定路径。%t/cri-dockerd.sock表示将监听Unix域套接字cri-dockerd.sock。Unix域套接字用于在同一台主机上的进程之间通信。
# - SocketMode指定了socket文件的权限模式此处为0660即用户和用户组有读写权限其他用户无权限。
# - SocketUser指定了socket文件的所有者此处为root用户。
# - SocketGroup指定了socket文件的所属用户组此处为docker用户组。
#
# [Install]
# - WantedBy部分定义了该单元的安装配置信息。WantedBysockets.target表示当sockets.target单元启动时自动启动该socket单元。sockets.target是一个系统服务用于管理所有的socket单元。 2.2.10 启动cri-docker systemctl daemon-reload
# 用于重新加载systemd管理的单位文件。当你新增或修改了某个单位文件如.service文件、.socket文件等需要运行该命令来刷新systemd对该文件的配置。systemctl enable --now cri-docker.service
# 启用并立即启动cri-docker.service单元。cri-docker.service是cri-docker守护进程的systemd服务单元。systemctl restart cri-docker.service
# 重启cri-docker.service单元即重新启动cri-docker守护进程。systemctl status docker.service
# 显示docker.service单元的当前状态包括运行状态、是否启用等信息。 2.3.k8s与etcd下载及安装仅在master01操作 2.3.1解压k8s安装包 # 下载安装包
# wget https://mirrors.chenby.cn/https://github.com/etcd-io/etcd/releases/download/v3.5.12/etcd-v3.5.12-linux-amd64.tar.gz
# wget https://dl.k8s.io/v1.30.1/kubernetes-server-linux-amd64.tar.gz# 解压k8s安装文件
cd cby
tar -xf kubernetes-server-linux-amd64.tar.gz --strip-components3 -C /usr/local/bin kubernetes/server/bin/kube{let,ctl,-apiserver,-controller-manager,-scheduler,-proxy}# 这是一个tar命令用于解压指定的kubernetes-server-linux-amd64.tar.gz文件并将其中的特定文件提取到/usr/local/bin目录下。
#
# 命令的解释如下
# - tar用于处理tar压缩文件的命令。
# - -xf表示解压操作。
# - kubernetes-server-linux-amd64.tar.gz要解压的文件名。
# - --strip-components3表示解压时忽略压缩文件中的前3级目录结构提取文件时直接放到目标目录中。
# - -C /usr/local/bin指定提取文件的目标目录为/usr/local/bin。
# - kubernetes/server/bin/kube{let,ctl,-apiserver,-controller-manager,-scheduler,-proxy}要解压和提取的文件名模式用花括号括起来表示模式中的多个可能的文件名。
#
# 总的来说这个命令的作用是将kubernetes-server-linux-amd64.tar.gz文件中的kubelet、kubectl、kube-apiserver、kube-controller-manager、kube-scheduler和kube-proxy六个文件提取到/usr/local/bin目录下同时忽略文件路径中的前三级目录结构。# 解压etcd安装文件
tar -xf etcd*.tar.gz mv etcd-*/etcd /usr/local/bin/ mv etcd-*/etcdctl /usr/local/bin/# 这是一个将文件解压并移动到特定目录的命令。这是一个用于 Linux 系统中的命令。
#
# - tar -xf etcd*.tar.gz这个命令将解压以 etcd 开头并以.tar.gz 结尾的文件。-xf 是使用 tar 命令的选项它表示解压文件并展开其中的内容。
# - mv etcd-*/etcd /usr/local/bin/这个命令将 etcd 文件移动到 /usr/local/bin 目录。mv 是移动命令它将 etcd-*/etcd 路径下的 etcd 文件移动到了 /usr/local/bin 目录。
# - mv etcd-*/etcdctl /usr/local/bin/这个命令将 etcdctl 文件移动到 /usr/local/bin 目录和上一条命令类似。
#
# 总结起来以上命令将从名为 etcd*.tar.gz 的压缩文件中解压出 etcd 和 etcdctl 文件并将它们移动到 /usr/local/bin 目录中。# 查看/usr/local/bin下内容
ll /usr/local/bin/
总用量 749524
-rwxr-xr-x. 1 root root 39035304 5月 17 05:57 containerd
-rwxr-xr-x. 1 root root 7176192 5月 17 05:57 containerd-shim
-rwxr-xr-x. 1 root root 8884224 5月 17 05:57 containerd-shim-runc-v1
-rwxr-xr-x. 1 root root 12169216 5月 17 05:57 containerd-shim-runc-v2
-rwxr-xr-x. 1 root root 17723392 5月 17 05:57 containerd-stress
-rwxr-xr-x. 1 root root 53362926 5月 17 05:58 crictl
-rwxr-xr-x. 1 root root 55511804 5月 17 05:58 critest
-rwxr-xr-x. 1 root root 26325112 5月 17 05:59 ctd-decoder
-rwxr-xr-x. 1 root root 18874368 5月 17 05:57 ctr
-rwxr-xr-x. 1 1000 docker 23146496 3月 30 02:28 etcd
-rwxr-xr-x. 1 1000 docker 17534976 3月 30 02:28 etcdctl
-rwxr-xr-x. 1 root root 112869528 5月 14 19:04 kube-apiserver
-rwxr-xr-x. 1 root root 107438232 5月 14 19:04 kube-controller-manager
-rwxr-xr-x. 1 root root 51454104 5月 14 19:04 kubectl
-rwxr-xr-x. 1 root root 100100024 5月 14 19:04 kubelet
-rwxr-xr-x. 1 root root 57577624 5月 14 19:04 kube-proxy
-rwxr-xr-x. 1 root root 58294424 5月 14 19:04 kube-scheduler 2.3.2查看版本 [rootk8s-master01 ~]# kubelet --version
Kubernetes v1.30.1
[rootk8s-master01 ~]# etcdctl version
etcdctl version: 3.5.13
API version: 3.5
[rootk8s-master01 ~]# 2.3.3将组件发送至其他k8s节点 Masterk8s-master02 k8s-master03
Workk8s-node01 k8s-node02# 拷贝master组件
for NODE in $Master; do echo $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# 该命令是一个for循环对于在$Master变量中的每个节点执行以下操作
#
# 1. 打印出节点的名称。
# 2. 使用scp命令将/usr/local/bin/kubelet、kubectl、kube-apiserver、kube-controller-manager、kube-scheduler和kube-proxy文件复制到节点的/usr/local/bin/目录下。
# 3. 使用scp命令将/usr/local/bin/etcd*文件复制到节点的/usr/local/bin/目录下。# 拷贝work组件
for NODE in $Work; do echo $NODE; scp /usr/local/bin/kube{let,-proxy} $NODE:/usr/local/bin/ ; done
# 该命令是一个for循环对于在$Master变量中的每个节点执行以下操作
#
# 1. 打印出节点的名称。
# 2. 使用scp命令将/usr/local/bin/kubelet和kube-proxy文件复制到节点的/usr/local/bin/目录下。# 所有节点执行
mkdir -p /opt/cni/bin 2.3创建证书相关文件 # 请查看Github仓库 或者进行获取已经打好的包
https://github.com/cby-chen/Kubernetes/
https://github.com/cby-chen/Kubernetes/tags
https://github.com/cby-chen/Kubernetes/releases/download/v1.30.1/kubernetes-v1.30.1.tar 3.相关证书生成 # master01节点下载证书生成工具
# wget https://mirrors.chenby.cn/https://github.com/cloudflare/cfssl/releases/download/v1.6.4/cfssl_1.6.4_linux_amd64 -O /usr/local/bin/cfssl
# wget https://mirrors.chenby.cn/https://github.com/cloudflare/cfssl/releases/download/v1.6.4/cfssljson_1.6.4_linux_amd64 -O /usr/local/bin/cfssljson# 软件包内有
cp cfssl_*_linux_amd64 /usr/local/bin/cfssl
cp cfssljson_*_linux_amd64 /usr/local/bin/cfssljson# 添加执行权限
chmod x /usr/local/bin/cfssl /usr/local/bin/cfssljson 3.1.生成etcd证书 特别说明除外以下操作在所有master节点操作 3.1.1所有master节点创建证书存放目录 mkdir /etc/etcd/ssl -p 3.1.2master01节点生成etcd证书 # 写入生成证书所需的配置文件
cat ca-config.json EOF
{signing: {default: {expiry: 876000h},profiles: {kubernetes: {usages: [signing,key encipherment,server auth,client auth],expiry: 876000h}}}
}
EOF
# 这段配置文件是用于配置加密和认证签名的一些参数。
#
# 在这里有两个部分signing和profiles。
#
# signing包含了默认签名配置和配置文件。
# 默认签名配置default指定了证书的过期时间为876000h。876000h表示证书有效期为100年。
#
# profiles部分定义了不同的证书配置文件。
# 在这里只有一个配置文件kubernetes。它包含了以下usages和过期时间expiry
#
# 1. signing用于对其他证书进行签名
# 2. key encipherment用于加密和解密传输数据
# 3. server auth用于服务器身份验证
# 4. client auth用于客户端身份验证
#
# 对于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
# 这是一个用于生成证书签名请求Certificate Signing RequestCSR的JSON配置文件。JSON配置文件指定了生成证书签名请求所需的数据。
#
# - CN: etcd 指定了希望生成的证书的CN字段Common Name即证书的主题通常是该证书标识的实体的名称。
# - key: {} 指定了生成证书所使用的密钥的配置信息。algo: rsa 指定了密钥的算法为RSAsize: 2048 指定了密钥的长度为2048位。
# - names: [] 包含了生成证书时所需的实体信息。在这个例子中只包含了一个实体其相关信息如下
# - C: CN 指定了实体的国家/地区代码这里是中国。
# - ST: Beijing 指定了实体所在的省/州。
# - L: Beijing 指定了实体所在的城市。
# - O: etcd 指定了实体的组织名称。
# - OU: Etcd Security 指定了实体所属的组织单位。
# - ca: {} 指定了生成证书时所需的CACertificate Authority配置信息。
# - expiry: 876000h 指定了证书的有效期这里是876000小时。
#
# 生成证书签名请求时可以使用这个JSON配置文件作为输入根据配置文件中的信息生成相应的CSR文件。然后可以将CSR文件发送给CA进行签名以获得有效的证书。# 生成etcd证书和etcd证书的key如果你觉得以后可能会扩容可以在ip那多写几个预留出来
# 若没有IPv6 可删除可保留 cfssl gencert -initca etcd-ca-csr.json | cfssljson -bare /etc/etcd/ssl/etcd-ca
# 具体的解释如下
#
# cfssl是一个用于生成TLS/SSL证书的工具它支持PKI、JSON格式配置文件以及与许多其他集成工具的配合使用。
#
# gencert参数表示生成证书的操作。-initca参数表示初始化一个CA证书颁发机构。CA是用于签发其他证书的根证书。etcd-ca-csr.json是一个JSON格式的配置文件其中包含了CA的详细信息如私钥、公钥、有效期等。这个文件提供了生成CA证书所需的信息。
#
# | 符号表示将上一个命令的输出作为下一个命令的输入。
#
# cfssljson是cfssl工具的一个子命令用于格式化cfssl生成的JSON数据。 -bare参数表示直接输出裸证书即只生成证书文件不包含其他格式的文件。/etc/etcd/ssl/etcd-ca是指定生成的证书文件的路径和名称。
#
# 所以这条命令的含义是使用cfssl工具根据配置文件ca-csr.json生成一个CA证书并将证书文件保存在/etc/etcd/ssl/etcd-ca路径下。cat etcd-csr.json EOF
{CN: etcd,key: {algo: rsa,size: 2048},names: [{C: CN,ST: Beijing,L: Beijing,O: etcd,OU: Etcd Security}]
}
EOF
# 这段代码是一个JSON格式的配置文件用于生成一个证书签名请求Certificate Signing RequestCSR。
#
# 首先CN字段指定了该证书的通用名称Common Name这里设为etcd。
#
# 接下来key字段指定了密钥的算法algo字段和长度size字段此处使用的是RSA算法密钥长度为2048位。
#
# 最后names字段是一个数组其中包含了一个名字对象用于指定证书中的一些其他信息。这个名字对象包含了以下字段
# - C字段指定了国家代码Country这里设置为CN。
# - ST字段指定了省份State或地区这里设置为Beijing。
# - L字段指定了城市Locality这里设置为Beijing。
# - O字段指定了组织Organization这里设置为etcd。
# - OU字段指定了组织单元Organizational Unit这里设置为Etcd Security。
#
# 这些字段将作为证书的一部分用于标识和验证证书的使用范围和颁发者等信息。cfssl gencert \-ca/etc/etcd/ssl/etcd-ca.pem \-ca-key/etc/etcd/ssl/etcd-ca-key.pem \-configca-config.json \-hostname127.0.0.1,k8s-master01,k8s-master02,k8s-master03,192.168.1.41,192.168.1.42,192.168.1.43,fc00:43f4:1eea:1::10,fc00:43f4:1eea:1::20,fc00:43f4:1eea:1::30,::1 \-profilekubernetes \etcd-csr.json | cfssljson -bare /etc/etcd/ssl/etcd
# 这是一条使用cfssl生成etcd证书的命令下面是各个参数的解释
#
# -ca/etc/etcd/ssl/etcd-ca.pem指定用于签名etcd证书的CA文件的路径。
# -ca-key/etc/etcd/ssl/etcd-ca-key.pem指定用于签名etcd证书的CA私钥文件的路径。
# -configca-config.json指定CA配置文件的路径该文件定义了证书的有效期、加密算法等设置。
# -hostnamexxxx指定要为etcd生成证书的主机名和IP地址列表。
# -profilekubernetes指定使用的证书配置文件该文件定义了证书的用途和扩展属性。
# etcd-csr.json指定etcd证书请求的JSON文件的路径该文件包含了证书请求的详细信息。
# | cfssljson -bare /etc/etcd/ssl/etcd通过管道将cfssl命令的输出传递给cfssljson命令并使用-bare参数指定输出文件的前缀路径这里将生成etcd证书的.pem和-key.pem文件。
#
# 这条命令的作用是使用指定的CA证书和私钥根据证书请求的JSON文件和配置文件生成etcd的证书文件。 3.1.3将证书复制到其他节点 Masterk8s-master02 k8s-master03
for NODE in $Master; do ssh $NODE mkdir -p /etc/etcd/ssl; for FILE in etcd-ca-key.pem etcd-ca.pem etcd-key.pem etcd.pem; do scp /etc/etcd/ssl/${FILE} $NODE:/etc/etcd/ssl/${FILE}; done; done# 这个命令是一个简单的for循环在一个由$Master存储的主机列表中迭代执行。对于每个主机它使用ssh命令登录到主机并在远程主机上创建一个名为/etc/etcd/ssl的目录如果不存在。接下来它使用scp将本地主机上/etc/etcd/ssl目录中的四个文件etcd-ca-key.pemetcd-ca.pemetcd-key.pem和etcd.pem复制到远程主机的/etc/etcd/ssl目录中。最终的结果是远程主机上的/etc/etcd/ssl目录中包含与本地主机上相同的四个文件的副本。 3.2.生成k8s相关证书 特别说明除外以下操作在所有master节点操作 3.2.1 所有k8s节点创建证书存放目录 mkdir -p /etc/kubernetes/pki 3.2.2 master01节点生成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
# 这是一个用于生成 Kubernetes 相关证书的配置文件。该配置文件中包含以下信息
#
# - CNCommonName即用于标识证书的通用名称。在此配置中CN 设置为 kubernetes表示该证书是用于 Kubernetes。
# - key用于生成证书的算法和大小。在此配置中使用的算法是 RSA大小是 2048 位。
# - names用于证书中的名称字段的详细信息。在此配置中有以下字段信息
# - CCountry即国家。在此配置中设置为 CN。
# - STState即省/州。在此配置中设置为 Beijing。
# - LLocality即城市。在此配置中设置为 Beijing。
# - OOrganization即组织。在此配置中设置为 Kubernetes。
# - OUOrganization Unit即组织单位。在此配置中设置为 Kubernetes-manual。
# - ca用于证书签名的证书颁发机构CA的配置信息。在此配置中设置了证书的有效期为 876000 小时。
#
# 这个配置文件可以用于生成 Kubernetes 相关的证书以确保集群中的通信安全性。cfssl gencert -initca ca-csr.json | cfssljson -bare /etc/kubernetes/pki/ca# 具体的解释如下
#
# cfssl是一个用于生成TLS/SSL证书的工具它支持PKI、JSON格式配置文件以及与许多其他集成工具的配合使用。
#
# gencert参数表示生成证书的操作。-initca参数表示初始化一个CA证书颁发机构。CA是用于签发其他证书的根证书。ca-csr.json是一个JSON格式的配置文件其中包含了CA的详细信息如私钥、公钥、有效期等。这个文件提供了生成CA证书所需的信息。
#
# | 符号表示将上一个命令的输出作为下一个命令的输入。
#
# cfssljson是cfssl工具的一个子命令用于格式化cfssl生成的JSON数据。 -bare参数表示直接输出裸证书即只生成证书文件不包含其他格式的文件。/etc/kubernetes/pki/ca是指定生成的证书文件的路径和名称。
#
# 所以这条命令的含义是使用cfssl工具根据配置文件ca-csr.json生成一个CA证书并将证书文件保存在/etc/kubernetes/pki/ca路径下。cat apiserver-csr.json EOF
{CN: kube-apiserver,key: {algo: rsa,size: 2048},names: [{C: CN,ST: Beijing,L: Beijing,O: Kubernetes,OU: Kubernetes-manual}]
}
EOF# 这是一个用于生成 Kubernetes 相关证书的配置文件。该配置文件中包含以下信息
#
# - CN 字段指定了证书的通用名称 (Common Name)这里设置为 kube-apiserver表示该证书用于 Kubernetes API Server。
# - key 字段指定了生成证书时所选用的加密算法和密钥长度。这里选用了 RSA 算法密钥长度为 2048 位。
# - names 字段包含了一组有关证书持有者信息的项。这里使用了以下信息
# - C 表示国家代码 (Country)这里设置为 CN 表示中国。
# - ST 表示州或省份 (State)这里设置为 Beijing 表示北京市。
# - L 表示城市或地区 (Location)这里设置为 Beijing 表示北京市。
# - O 表示组织名称 (Organization)这里设置为 Kubernetes 表示 Kubernetes。
# - OU 表示组织单位 (Organizational Unit)这里设置为 Kubernetes-manual 表示手动管理的 Kubernetes 集群。
#
# 这个配置文件可以用于生成 Kubernetes 相关的证书以确保集群中的通信安全性。# 生成一个根证书 多写了一些IP作为预留IP为将来添加node做准备
# 10.96.0.1是service网段的第一个地址需要计算192.168.1.46为高可用vip地址
# 若没有IPv6 可删除可保留 cfssl gencert \
-ca/etc/kubernetes/pki/ca.pem \
-ca-key/etc/kubernetes/pki/ca-key.pem \
-configca-config.json \
-hostname10.96.0.1,192.168.1.46,127.0.0.1,kubernetes,kubernetes.default,kubernetes.default.svc,kubernetes.default.svc.cluster,kubernetes.default.svc.cluster.local,x.oiox.cn,k.oiox.cn,l.oiox.cn,o.oiox.cn,192.168.1.41,192.168.1.42,192.168.1.43,192.168.1.44,192.168.1.45,192.168.1.46,192.168.0.47,192.168.0.48,192.168.0.49,192.168.1.50,fc00:43f4:1eea:1::10,fc00:43f4:1eea:1::20,fc00:43f4:1eea:1::30,fc00:43f4:1eea:1::40,fc00:43f4:1eea:1::50,fc00:43f4:1eea:1::60,fc00:43f4:1eea:1::70,fc00:43f4:1eea:1::80,fc00:43f4:1eea:1::90,fc00:43f4:1eea:1::100,::1 \
-profilekubernetes apiserver-csr.json | cfssljson -bare /etc/kubernetes/pki/apiserver# 这个命令是使用cfssl工具生成Kubernetes API Server的证书。
#
# 命令的参数解释如下
# - -ca/etc/kubernetes/pki/ca.pem指定证书的颁发机构CA文件路径。
# - -ca-key/etc/kubernetes/pki/ca-key.pem指定证书的颁发机构CA私钥文件路径。
# - -configca-config.json指定证书生成的配置文件路径配置文件中包含了证书的有效期、加密算法等信息。
# - -hostname10.96.0.1,192.168.1.46,127.0.0.1,fc00:43f4:1eea:1::10指定证书的主机名或IP地址列表。
# - -profilekubernetes指定证书生成的配置文件中的配置文件名。
# - apiserver-csr.jsonAPI Server的证书签名请求配置文件路径。
# - | cfssljson -bare /etc/kubernetes/pki/apiserver通过管道将生成的证书输出到cfssljson工具将其转换为PEM编码格式并保存到 /etc/kubernetes/pki/apiserver.pem 和 /etc/kubernetes/pki/apiserver-key.pem 文件中。
#
# 最终这个命令将会生成API Server的证书和私钥并保存到指定的文件中。 3.2.3 生成apiserver聚合证书 cat front-proxy-ca-csr.json EOF
{CN: kubernetes,key: {algo: rsa,size: 2048},ca: {expiry: 876000h}
}
EOF# 这个JSON文件表示了生成一个名为kubernetes的证书的配置信息。这个证书是用来进行Kubernetes集群的身份验证和安全通信。
#
# 配置信息包括以下几个部分
#
# 1. CN: kubernetes这表示了证书的通用名称Common Name也就是证书所代表的实体的名称。在这里证书的通用名称被设置为kubernetes表示这个证书是用来代表Kubernetes集群。
#
# 2. key这是用来生成证书的密钥相关的配置。在这里配置使用了RSA算法并且设置了密钥的大小为2048位。
#
# 3. ca这个字段指定了证书的颁发机构Certificate Authority相关的配置。在这里配置指定了证书的有效期为876000小时即100年。这意味着该证书在100年内将被视为有效过期后需要重新生成。
#
# 总之这个JSON文件中的配置信息描述了如何生成一个用于Kubernetes集群的证书包括证书的通用名称、密钥算法和大小以及证书的有效期。cfssl gencert -initca front-proxy-ca-csr.json | cfssljson -bare /etc/kubernetes/pki/front-proxy-ca
# 具体的解释如下
#
# cfssl是一个用于生成TLS/SSL证书的工具它支持PKI、JSON格式配置文件以及与许多其他集成工具的配合使用。
#
# gencert参数表示生成证书的操作。-initca参数表示初始化一个CA证书颁发机构。CA是用于签发其他证书的根证书。front-proxy-ca-csr.json是一个JSON格式的配置文件其中包含了CA的详细信息如私钥、公钥、有效期等。这个文件提供了生成CA证书所需的信息。
#
# | 符号表示将上一个命令的输出作为下一个命令的输入。
#
# cfssljson是cfssl工具的一个子命令用于格式化cfssl生成的JSON数据。 -bare参数表示直接输出裸证书即只生成证书文件不包含其他格式的文件。/etc/kubernetes/pki/front-proxy-ca是指定生成的证书文件的路径和名称。
#
# 所以这条命令的含义是使用cfssl工具根据配置文件ca-csr.json生成一个CA证书并将证书文件保存在/etc/kubernetes/pki/front-proxy-ca路径下。cat front-proxy-client-csr.json EOF
{CN: front-proxy-client,key: {algo: rsa,size: 2048}
}
EOF# 这是一个JSON格式的配置文件用于描述一个名为front-proxy-client的配置。配置包括两个字段CN和key。
#
# - CNCommon Name字段表示证书的通用名称这里为front-proxy-client。
# - key字段描述了密钥的算法和大小。algo表示使用RSA算法size表示密钥大小为2048位。
#
# 该配置文件用于生成一个SSL证书用于在前端代理客户端进行认证和数据传输的加密。这个证书中的通用名称是front-proxy-client使用RSA算法生成密钥大小为2048位。cfssl gencert \
-ca/etc/kubernetes/pki/front-proxy-ca.pem \
-ca-key/etc/kubernetes/pki/front-proxy-ca-key.pem \
-configca-config.json \
-profilekubernetes front-proxy-client-csr.json | cfssljson -bare /etc/kubernetes/pki/front-proxy-client# 这个命令使用cfssl工具生成一个用于Kubernetes的front-proxy-client证书。
#
# 主要参数解释如下
# - -ca/etc/kubernetes/pki/front-proxy-ca.pem: 指定用于签署证书的根证书文件路径。
# - -ca-key/etc/kubernetes/pki/front-proxy-ca-key.pem: 指定用于签署证书的根证书的私钥文件路径。
# - -configca-config.json: 指定用于配置证书签署的配置文件路径。该配置文件描述了证书生成的一些规则如加密算法和有效期等。
# - -profilekubernetes: 指定生成证书时使用的配置文件中定义的profile其中包含了一些默认的参数。
# - front-proxy-client-csr.json: 指定用于生成证书的CSR文件路径该文件包含了证书请求的相关信息。
# - | cfssljson -bare /etc/kubernetes/pki/front-proxy-client: 通过管道将生成的证书输出到cfssljson工具进行解析并通过-bare参数将证书和私钥分别保存到指定路径。
#
# 这个命令的作用是根据提供的CSR文件和配置信息使用指定的根证书和私钥生成一个前端代理客户端的证书并将证书和私钥分别保存到/etc/kubernetes/pki/front-proxy-client.pem和/etc/kubernetes/pki/front-proxy-client-key.pem文件中。 3.2.4 生成controller-manage的证书 在《5.高可用配置》选择使用那种高可用方案若使用 haproxy、keepalived 那么为 --serverhttps://192.168.1.46:9443若使用 nginx方案那么为 --serverhttps://127.0.0.1:8443 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}]
}
EOF
# 这是一个用于生成密钥对公钥和私钥的JSON配置文件。下面是针对该文件中每个字段的详细解释
#
# - CN: 值为system:kube-controller-manager代表通用名称Common Name是此密钥对的主题subject。
# - key: 这个字段用来定义密钥算法和大小。
# - algo: 值为rsa表示使用RSA算法。
# - size: 值为2048表示生成的密钥大小为2048位。
# - names: 这个字段用来定义密钥对的各个名称字段。
# - C: 值为CN表示国家Country名称是CN中国。
# - ST: 值为Beijing表示省/州State/Province名称是Beijing北京。
# - L: 值为Beijing表示城市Locality名称是Beijing北京。
# - O: 值为system:kube-controller-manager表示组织Organization名称是system:kube-controller-manager。
# - OU: 值为Kubernetes-manual表示组织单位Organizational Unit名称是Kubernetes-manual。
#
# 这个JSON配置文件基本上是告诉生成密钥对的工具生成一个带有特定名称和属性的密钥对。cfssl gencert \-ca/etc/kubernetes/pki/ca.pem \-ca-key/etc/kubernetes/pki/ca-key.pem \-configca-config.json \-profilekubernetes \manager-csr.json | cfssljson -bare /etc/kubernetes/pki/controller-manager
# 这是一个命令行操作使用cfssl工具生成证书。
#
# 1. cfssl gencert 是cfssl工具的命令用于生成证书。
# 2. -ca 指定根证书的路径和文件名这里是/etc/kubernetes/pki/ca.pem。
# 3. -ca-key 指定根证书的私钥的路径和文件名这里是/etc/kubernetes/pki/ca-key.pem。
# 4. -config 指定配置文件的路径和文件名这里是ca-config.json。
# 5. -profile 指定证书使用的配置文件中的配置模板这里是kubernetes。
# 6. manager-csr.json 是证书签发请求的配置文件用于生成证书签发请求。
# 7. | 管道操作符将前一条命令的输出作为后一条命令的输入。
# 8. cfssljson -bare 是 cfssl 工具的命令作用是将证书签发请求的输出转换为PKCS1、PKCS8和x509 PEM文件。
# 9. /etc/kubernetes/pki/controller-manager 是转换后的 PEM 文件的存储位置和文件名。
#
# 这个命令的作用是根据根证书和私钥、配置文件以及证书签发请求的配置文件生成经过签发的控制器管理器证书和私钥并将转换后的 PEM 文件保存到指定的位置。# 设置一个集群项
# 在《5.高可用配置》选择使用那种高可用方案
# 若使用 haproxy、keepalived 那么为 --serverhttps://192.168.1.46:9443
# 若使用 nginx方案那么为 --serverhttps://127.0.0.1:8443
kubectl config set-cluster kubernetes \--certificate-authority/etc/kubernetes/pki/ca.pem \--embed-certstrue \--serverhttps://127.0.0.1:8443 \--kubeconfig/etc/kubernetes/controller-manager.kubeconfig
# kubectl config set-cluster命令用于配置集群信息。
# --certificate-authority选项指定了集群的证书颁发机构CA的路径这个CA会验证kube-apiserver提供的证书是否合法。
# --embed-certs选项用于将证书嵌入到生成的kubeconfig文件中这样就不需要在kubeconfig文件中单独指定证书文件路径。
# --server选项指定了kube-apiserver的地址这里使用的是127.0.0.1:8443表示使用本地主机上的kube-apiserver默认端口为8443。
# --kubeconfig选项指定了生成的kubeconfig文件的路径和名称这里指定为/etc/kubernetes/controller-manager.kubeconfig。
# 综上所述kubectl config set-cluster命令的作用是在kubeconfig文件中设置集群信息包括证书颁发机构、证书、kube-apiserver地址等。# 设置一个环境项一个上下文
kubectl config set-context system:kube-controller-managerkubernetes \--clusterkubernetes \--usersystem:kube-controller-manager \--kubeconfig/etc/kubernetes/controller-manager.kubeconfig
# 这个命令用于配置 Kubernetes 控制器管理器的上下文信息。下面是各个参数的详细解释
# 1. kubectl config set-context system:kube-controller-managerkubernetes: 设置上下文的名称为 system:kube-controller-managerkubernetes这是一个标识符用于唯一标识该上下文。
# 2. --clusterkubernetes: 指定集群的名称为 kubernetes这是一个现有集群的标识符表示要管理的 Kubernetes 集群。
# 3. --usersystem:kube-controller-manager: 指定使用的用户身份为 system:kube-controller-manager。这是一个特殊的用户身份具有控制 Kubernetes 控制器管理器的权限。
# 4. --kubeconfig/etc/kubernetes/controller-manager.kubeconfig: 指定 kubeconfig 文件的路径为 /etc/kubernetes/controller-manager.kubeconfig。kubeconfig 文件是一个用于管理 Kubernetes 配置的文件包含了集群、用户和上下文的相关信息。
# 通过运行这个命令可以将这些配置信息保存到 /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-certstrue \--kubeconfig/etc/kubernetes/controller-manager.kubeconfig
# 上述命令是用于设置 Kubernetes 的 controller-manager 组件的客户端凭据。下面是每个参数的详细解释
#
# - kubectl config: 是使用 kubectl 命令行工具的配置子命令。
# - set-credentials: 是定义一个新的用户凭据配置的子命令。
# - system:kube-controller-manager: 是设置用户凭据的名称system: 是 Kubernetes API Server 内置的身份验证器使用的用户标识符前缀它表示是一个系统用户在本例中是 kube-controller-manager 组件使用的身份。
# - --client-certificate/etc/kubernetes/pki/controller-manager.pem: 指定 controller-manager.pem 客户端证书的路径。
# - --client-key/etc/kubernetes/pki/controller-manager-key.pem: 指定 controller-manager-key.pem 客户端私钥的路径。
# - --embed-certstrue: 表示将证书和私钥直接嵌入到生成的 kubeconfig 文件中而不是通过引用外部文件。
# - --kubeconfig/etc/kubernetes/controller-manager.kubeconfig: 指定生成的 kubeconfig 文件的路径和文件名即 controller-manager.kubeconfig。
#
# 通过运行上述命令将根据提供的证书和私钥信息为 kube-controller-manager 创建一个 kubeconfig 文件以便后续使用该文件进行身份验证和访问 Kubernetes API。# 设置默认环境
kubectl config use-context system:kube-controller-managerkubernetes \--kubeconfig/etc/kubernetes/controller-manager.kubeconfig
# 这个命令是用来指定kubectl使用指定的上下文环境来执行操作。上下文环境是kubectl用来确定要连接到哪个Kubernetes集群以及使用哪个身份验证信息的配置。
#
# 在这个命令中kubectl config use-context是用来设置当前上下文环境的命令。 system:kube-controller-managerkubernetes是指定的上下文名称它告诉kubectl要使用的Kubernetes集群和身份验证信息。
# --kubeconfig/etc/kubernetes/controller-manager.kubeconfig是用来指定使用的kubeconfig文件的路径。kubeconfig文件是存储集群连接和身份验证信息的配置文件。
# 通过执行这个命令kubectl将使用指定的上下文来执行后续的操作包括部署和管理Kubernetes资源。 3.2.5 生成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}]
}
EOF
# 这个命令是用来创建一个叫做scheduler-csr.json的文件并将其中的内容赋值给该文件。
#
# 文件内容是一个JSON格式的文本包含了一个描述证书请求的结构。
#
# 具体内容如下
#
# - CN: system:kube-schedulerCommon Name字段表示该证书的名称为system:kube-scheduler。
# - key: {algo: rsa, size: 2048}key字段指定生成证书时使用的加密算法是RSA并且密钥的长度为2048位。
# - names: [...]names字段定义了证书中的另外一些标识信息。
# - C: CNCountry字段表示国家/地区为中国。
# - ST: BeijingState字段表示省/市为北京。
# - L: BeijingLocality字段表示所在城市为北京。
# - O: system:kube-schedulerOrganization字段表示组织为system:kube-scheduler。
# - OU: Kubernetes-manualOrganizational Unit字段表示组织单元为Kubernetes-manual。
#
# 而EOF是一个占位符用于标记开始和结束的位置。在开始的EOF之后到结束的EOF之间的内容将会被写入到scheduler-csr.json文件中。
#
# 总体来说这个命令用于生成一个描述kube-scheduler证书请求的JSON文件。cfssl gencert \-ca/etc/kubernetes/pki/ca.pem \-ca-key/etc/kubernetes/pki/ca-key.pem \-configca-config.json \-profilekubernetes \scheduler-csr.json | cfssljson -bare /etc/kubernetes/pki/scheduler
# 上述命令是使用cfssl工具生成Kubernetes Scheduler的证书。
#
# 具体解释如下
#
# 1. cfssl gencert使用cfssl工具生成证书。
# 2. -ca/etc/kubernetes/pki/ca.pem指定根证书文件的路径。在这里是指定根证书的路径为/etc/kubernetes/pki/ca.pem。
# 3. -ca-key/etc/kubernetes/pki/ca-key.pem指定根证书私钥文件的路径。在这里是指定根证书私钥的路径为/etc/kubernetes/pki/ca-key.pem。
# 4. -configca-config.json指定证书配置文件的路径。在这里是指定证书配置文件的路径为ca-config.json。
# 5. -profilekubernetes指定证书的配置文件中的一个配置文件模板。在这里是指定配置文件中的kubernetes配置模板。
# 6. scheduler-csr.json指定Scheduler的证书签名请求文件CSR的路径。在这里是指定请求文件的路径为scheduler-csr.json。
# 7. |管道符号将前一个命令的输出作为下一个命令的输入。
# 8. cfssljson将cfssl工具生成的证书签名请求(CSR)进行解析。
# 9. -bare /etc/kubernetes/pki/scheduler指定输出路径和前缀。在这里是将解析的证书签名请求生成以下文件/etc/kubernetes/pki/scheduler.pem包含了证书、/etc/kubernetes/pki/scheduler-key.pem包含了私钥。
#
# 总结来说这个命令的目的是根据根证书、根证书私钥、证书配置文件、CSR文件等生成Kubernetes Scheduler的证书和私钥文件。# 在《5.高可用配置》选择使用那种高可用方案
# 若使用 haproxy、keepalived 那么为 --serverhttps://192.168.1.46:9443
# 若使用 nginx方案那么为 --serverhttps://127.0.0.1:8443kubectl config set-cluster kubernetes \--certificate-authority/etc/kubernetes/pki/ca.pem \--embed-certstrue \--serverhttps://127.0.0.1:8443 \--kubeconfig/etc/kubernetes/scheduler.kubeconfig
# 该命令用于配置一个名为kubernetes的集群并将其应用到/etc/kubernetes/scheduler.kubeconfig文件中。
#
# 该命令的解释如下
# - kubectl config set-cluster kubernetes: 设置一个集群并命名为kubernetes。
# - --certificate-authority/etc/kubernetes/pki/ca.pem: 指定集群使用的证书授权机构的路径。
# - --embed-certstrue: 该标志指示将证书嵌入到生成的kubeconfig文件中。
# - --serverhttps://127.0.0.1:8443: 指定集群的 API server 位置。
# - --kubeconfig/etc/kubernetes/scheduler.kubeconfig: 指定要保存 kubeconfig 文件的路径和名称。kubectl config set-credentials system:kube-scheduler \--client-certificate/etc/kubernetes/pki/scheduler.pem \--client-key/etc/kubernetes/pki/scheduler-key.pem \--embed-certstrue \--kubeconfig/etc/kubernetes/scheduler.kubeconfig
# 这段命令是用于设置 kube-scheduler 组件的身份验证凭据并生成相应的 kubeconfig 文件。
#
# 解释每个选项的含义如下
# - kubectl config set-credentials system:kube-scheduler设置 system:kube-scheduler 用户的身份验证凭据。
# - --client-certificate/etc/kubernetes/pki/scheduler.pem指定一个客户端证书文件用于基于证书的身份验证。在这种情况下指定了 kube-scheduler 组件的证书文件路径。
# - --client-key/etc/kubernetes/pki/scheduler-key.pem指定与客户端证书相对应的客户端私钥文件。
# - --embed-certstrue将客户端证书和私钥嵌入到生成的 kubeconfig 文件中。
# - --kubeconfig/etc/kubernetes/scheduler.kubeconfig指定生成的 kubeconfig 文件的路径和名称。
#
# 该命令的目的是为 kube-scheduler 组件生成一个 kubeconfig 文件以便进行身份验证和访问集群资源。kubeconfig 文件是一个包含了连接到 Kubernetes 集群所需的所有配置信息的文件包括服务器地址、证书和秘钥等。kubectl config set-context system:kube-schedulerkubernetes \--clusterkubernetes \--usersystem:kube-scheduler \--kubeconfig/etc/kubernetes/scheduler.kubeconfig
# 该命令用于设置一个名为system:kube-schedulerkubernetes的上下文具体配置如下
#
# 1. --clusterkubernetes: 指定集群的名称为kubernetes这个集群是在当前的kubeconfig文件中已经定义好的。
# 2. --usersystem:kube-scheduler: 指定用户的名称为system:kube-scheduler这个用户也是在当前的kubeconfig文件中已经定义好的。这个用户用于认证和授权kube-scheduler组件访问Kubernetes集群的权限。
# 3. --kubeconfig/etc/kubernetes/scheduler.kubeconfig: 指定kubeconfig文件的路径为/etc/kubernetes/scheduler.kubeconfig这个文件将被用来保存上下文的配置信息。
#
# 这个命令的作用是将上述的配置信息保存到指定的kubeconfig文件中以便后续使用该文件进行认证和授权访问Kubernetes集群。kubectl config use-context system:kube-schedulerkubernetes \--kubeconfig/etc/kubernetes/scheduler.kubeconfig
# 上述命令是使用kubectl命令来配置Kubernetes集群中的调度器组件。
#
# kubectl config use-context命令用于切换kubectl当前使用的上下文。上下文是Kubernetes集群、用户和命名空间的组合用于确定kubectl的连接目标。下面解释这个命令的不同部分
#
# - system:kube-schedulerkubernetes是一个上下文名称。它指定了使用kube-scheduler用户和kubernetes命名空间的系统级别上下文。系统级别上下文用于操作Kubernetes核心组件。
#
# - --kubeconfig/etc/kubernetes/scheduler.kubeconfig用于指定Kubernetes配置文件的路径。Kubernetes配置文件包含连接到Kubernetes集群所需的身份验证和连接信息。
#
# 通过运行以上命令kubectl将使用指定的上下文和配置文件以便在以后的命令中能正确地与Kubernetes集群中的调度器组件进行交互。 3.2.6 生成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}]
}
EOF
# 这段代码是一个JSON格式的配置文件用于创建和配置一个名为admin的Kubernetes凭证。
#
# 这个凭证包含以下字段
#
# - CN: admin: 这是凭证的通用名称表示这是一个管理员凭证。
# - key: 这是一个包含证书密钥相关信息的对象。
# - algo: rsa这是使用的加密算法类型这里是RSA加密算法。
# - size: 2048这是密钥的大小这里是2048位。
# - names: 这是一个包含证书名称信息的数组。
# - C: CN这是证书的国家/地区字段这里是中国。
# - ST: Beijing这是证书的省/州字段这里是北京。
# - L: Beijing这是证书的城市字段这里是北京。
# - O: system:masters这是证书的组织字段这里是system:masters表示系统的管理员组。
# - OU: Kubernetes-manual这是证书的部门字段这里是Kubernetes-manual。
#
# 通过这个配置文件创建的凭证将具有管理员权限并且可以用于管理Kubernetes集群。cfssl gencert \-ca/etc/kubernetes/pki/ca.pem \-ca-key/etc/kubernetes/pki/ca-key.pem \-configca-config.json \-profilekubernetes \admin-csr.json | cfssljson -bare /etc/kubernetes/pki/admin
# 上述命令是使用cfssl工具生成Kubernetes admin的证书。
#
# 具体解释如下
#
# 1. cfssl gencert使用cfssl工具生成证书。
# 2. -ca/etc/kubernetes/pki/ca.pem指定根证书文件的路径。在这里是指定根证书的路径为/etc/kubernetes/pki/ca.pem。
# 3. -ca-key/etc/kubernetes/pki/ca-key.pem指定根证书私钥文件的路径。在这里是指定根证书私钥的路径为/etc/kubernetes/pki/ca-key.pem。
# 4. -configca-config.json指定证书配置文件的路径。在这里是指定证书配置文件的路径为ca-config.json。
# 5. -profilekubernetes指定证书的配置文件中的一个配置文件模板。在这里是指定配置文件中的kubernetes配置模板。
# 6. admin-csr.json指定admin的证书签名请求文件CSR的路径。在这里是指定请求文件的路径为admin-csr.json。
# 7. |管道符号将前一个命令的输出作为下一个命令的输入。
# 8. cfssljson将cfssl工具生成的证书签名请求(CSR)进行解析。
# 9. -bare /etc/kubernetes/pki/admin指定输出路径和前缀。在这里是将解析的证书签名请求生成以下文件/etc/kubernetes/pki/admin.pem包含了证书、/etc/kubernetes/pki/admin-key.pem包含了私钥。
#
# 总结来说这个命令的目的是根据根证书、根证书私钥、证书配置文件、CSR文件等生成Kubernetes Scheduler的证书和私钥文件。# 在《5.高可用配置》选择使用那种高可用方案
# 若使用 haproxy、keepalived 那么为 --serverhttps://192.168.1.46:9443
# 若使用 nginx方案那么为 --serverhttps://127.0.0.1:8443kubectl config set-cluster kubernetes \--certificate-authority/etc/kubernetes/pki/ca.pem \--embed-certstrue \--serverhttps://127.0.0.1:8443 \--kubeconfig/etc/kubernetes/admin.kubeconfig
# 该命令用于配置一个名为kubernetes的集群并将其应用到/etc/kubernetes/scheduler.kubeconfig文件中。
#
# 该命令的解释如下
# - kubectl config set-cluster kubernetes: 设置一个集群并命名为kubernetes。
# - --certificate-authority/etc/kubernetes/pki/ca.pem: 指定集群使用的证书授权机构的路径。
# - --embed-certstrue: 该标志指示将证书嵌入到生成的kubeconfig文件中。
# - --serverhttps://127.0.0.1:8443: 指定集群的 API server 位置。
# - --kubeconfig/etc/kubernetes/admin.kubeconfig: 指定要保存 kubeconfig 文件的路径和名称。kubectl config set-credentials kubernetes-admin \--client-certificate/etc/kubernetes/pki/admin.pem \--client-key/etc/kubernetes/pki/admin-key.pem \--embed-certstrue \--kubeconfig/etc/kubernetes/admin.kubeconfig
# 这段命令是用于设置 kubernetes-admin 组件的身份验证凭据并生成相应的 kubeconfig 文件。
#
# 解释每个选项的含义如下
# - kubectl config set-credentials kubernetes-admin设置 kubernetes-admin 用户的身份验证凭据。
# - --client-certificate/etc/kubernetes/pki/admin.pem指定一个客户端证书文件用于基于证书的身份验证。在这种情况下指定了 admin 组件的证书文件路径。
# - --client-key/etc/kubernetes/pki/admin-key.pem指定与客户端证书相对应的客户端私钥文件。
# - --embed-certstrue将客户端证书和私钥嵌入到生成的 kubeconfig 文件中。
# - --kubeconfig/etc/kubernetes/admin.kubeconfig指定生成的 kubeconfig 文件的路径和名称。
#
# 该命令的目的是为 admin 组件生成一个 kubeconfig 文件以便进行身份验证和访问集群资源。kubeconfig 文件是一个包含了连接到 Kubernetes 集群所需的所有配置信息的文件包括服务器地址、证书和秘钥等。kubectl config set-context kubernetes-adminkubernetes \--clusterkubernetes \--userkubernetes-admin \--kubeconfig/etc/kubernetes/admin.kubeconfig
# 该命令用于设置一个名为kubernetes-adminkubernetes的上下文具体配置如下
#
# 1. --clusterkubernetes: 指定集群的名称为kubernetes这个集群是在当前的kubeconfig文件中已经定义好的。
# 2. --userkubernetes-admin: 指定用户的名称为kubernetes-admin这个用户也是在当前的kubeconfig文件中已经定义好的。这个用户用于认证和授权admin组件访问Kubernetes集群的权限。
# 3. --kubeconfig/etc/kubernetes/admin.kubeconfig: 指定kubeconfig文件的路径为/etc/kubernetes/admin.kubeconfig这个文件将被用来保存上下文的配置信息。
#
# 这个命令的作用是将上述的配置信息保存到指定的kubeconfig文件中以便后续使用该文件进行认证和授权访问Kubernetes集群。kubectl config use-context kubernetes-adminkubernetes --kubeconfig/etc/kubernetes/admin.kubeconfig
# 上述命令是使用kubectl命令来配置Kubernetes集群中的调度器组件。
#
# kubectl config use-context命令用于切换kubectl当前使用的上下文。上下文是Kubernetes集群、用户和命名空间的组合用于确定kubectl的连接目标。下面解释这个命令的不同部分
#
# - kubernetes-adminkubernetes是一个上下文名称。它指定了使用kubernetes-admin用户和kubernetes命名空间的系统级别上下文。系统级别上下文用于操作Kubernetes核心组件。
#
# - --kubeconfig/etc/kubernetes/admin.kubeconfig用于指定Kubernetes配置文件的路径。Kubernetes配置文件包含连接到Kubernetes集群所需的身份验证和连接信息。
#
# 通过运行以上命令kubectl将使用指定的上下文和配置文件以便在以后的命令中能正确地与Kubernetes集群中的调度器组件进行交互。 3.2.7 创建kube-proxy证书 在《5.高可用配置》选择使用那种高可用方案若使用 haproxy、keepalived 那么为 --serverhttps://192.168.1.46:9443若使用 nginx方案那么为 --serverhttps://127.0.0.1:8443 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}]
}
EOF
# 这段代码是一个JSON格式的配置文件用于创建和配置一个名为kube-proxy-csr的Kubernetes凭证。
#
# 这个凭证包含以下字段
#
# - CN: system:kube-proxy: 这是凭证的通用名称表示这是一个管理员凭证。
# - key: 这是一个包含证书密钥相关信息的对象。
# - algo: rsa这是使用的加密算法类型这里是RSA加密算法。
# - size: 2048这是密钥的大小这里是2048位。
# - names: 这是一个包含证书名称信息的数组。
# - C: CN这是证书的国家/地区字段这里是中国。
# - ST: Beijing这是证书的省/州字段这里是北京。
# - L: Beijing这是证书的城市字段这里是北京。
# - O: system:kube-proxy这是证书的组织字段这里是system:kube-proxy。
# - OU: Kubernetes-manual这是证书的部门字段这里是Kubernetes-manual。
#
# 通过这个配置文件创建的凭证将具有管理员权限并且可以用于管理Kubernetes集群。cfssl gencert \-ca/etc/kubernetes/pki/ca.pem \-ca-key/etc/kubernetes/pki/ca-key.pem \-configca-config.json \-profilekubernetes \kube-proxy-csr.json | cfssljson -bare /etc/kubernetes/pki/kube-proxy
# 上述命令是使用cfssl工具生成Kubernetes admin的证书。
#
# 具体解释如下
#
# 1. cfssl gencert使用cfssl工具生成证书。
# 2. -ca/etc/kubernetes/pki/ca.pem指定根证书文件的路径。在这里是指定根证书的路径为/etc/kubernetes/pki/ca.pem。
# 3. -ca-key/etc/kubernetes/pki/ca-key.pem指定根证书私钥文件的路径。在这里是指定根证书私钥的路径为/etc/kubernetes/pki/ca-key.pem。
# 4. -configca-config.json指定证书配置文件的路径。在这里是指定证书配置文件的路径为ca-config.json。
# 5. -profilekubernetes指定证书的配置文件中的一个配置文件模板。在这里是指定配置文件中的kubernetes配置模板。
# 6. kube-proxy-csr.json指定admin的证书签名请求文件CSR的路径。在这里是指定请求文件的路径为kube-proxy-csr.json。
# 7. |管道符号将前一个命令的输出作为下一个命令的输入。
# 8. cfssljson将cfssl工具生成的证书签名请求(CSR)进行解析。
# 9. -bare /etc/kubernetes/pki/kube-proxy指定输出路径和前缀。在这里是将解析的证书签名请求生成以下文件/etc/kubernetes/pki/kube-proxy.pem包含了证书、/etc/kubernetes/pki/kube-proxy-key.pem包含了私钥。
#
# 总结来说这个命令的目的是根据根证书、根证书私钥、证书配置文件、CSR文件等生成Kubernetes Scheduler的证书和私钥文件。# 在《5.高可用配置》选择使用那种高可用方案
# 若使用 haproxy、keepalived 那么为 --serverhttps://192.168.1.46:9443
# 若使用 nginx方案那么为 --serverhttps://127.0.0.1:8443kubectl config set-cluster kubernetes \--certificate-authority/etc/kubernetes/pki/ca.pem \--embed-certstrue \--serverhttps://127.0.0.1:8443 \--kubeconfig/etc/kubernetes/kube-proxy.kubeconfig
# 该命令用于配置一个名为kubernetes的集群并将其应用到/etc/kubernetes/kube-proxy.kubeconfig文件中。
#
# 该命令的解释如下
# - kubectl config set-cluster kubernetes: 设置一个集群并命名为kubernetes。
# - --certificate-authority/etc/kubernetes/pki/ca.pem: 指定集群使用的证书授权机构的路径。
# - --embed-certstrue: 该标志指示将证书嵌入到生成的kubeconfig文件中。
# - --serverhttps://127.0.0.1:8443: 指定集群的 API server 位置。
# - --kubeconfig/etc/kubernetes/kube-proxy.kubeconfig: 指定要保存 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-certstrue \--kubeconfig/etc/kubernetes/kube-proxy.kubeconfig
# 这段命令是用于设置 kube-proxy 组件的身份验证凭据并生成相应的 kubeconfig 文件。
#
# 解释每个选项的含义如下
# - kubectl config set-credentials kube-proxy设置 kube-proxy 用户的身份验证凭据。
# - --client-certificate/etc/kubernetes/pki/kube-proxy.pem指定一个客户端证书文件用于基于证书的身份验证。在这种情况下指定了 kube-proxy 组件的证书文件路径。
# - --client-key/etc/kubernetes/pki/kube-proxy-key.pem指定与客户端证书相对应的客户端私钥文件。
# - --embed-certstrue将客户端证书和私钥嵌入到生成的 kubeconfig 文件中。
# - --kubeconfig/etc/kubernetes/kube-proxy.kubeconfig指定生成的 kubeconfig 文件的路径和名称。
#
# 该命令的目的是为 kube-proxy 组件生成一个 kubeconfig 文件以便进行身份验证和访问集群资源。kubeconfig 文件是一个包含了连接到 Kubernetes 集群所需的所有配置信息的文件包括服务器地址、证书和秘钥等。kubectl config set-context kube-proxykubernetes \--clusterkubernetes \--userkube-proxy \--kubeconfig/etc/kubernetes/kube-proxy.kubeconfig
# 该命令用于设置一个名为kube-proxykubernetes的上下文具体配置如下
#
# 1. --clusterkubernetes: 指定集群的名称为kubernetes这个集群是在当前的kubeconfig文件中已经定义好的。
# 2. --userkube-proxy: 指定用户的名称为kube-proxy这个用户也是在当前的kubeconfig文件中已经定义好的。这个用户用于认证和授权kube-proxy组件访问Kubernetes集群的权限。
# 3. --kubeconfig/etc/kubernetes/kube-proxy.kubeconfig: 指定kubeconfig文件的路径为/etc/kubernetes/kube-proxy.kubeconfig这个文件将被用来保存上下文的配置信息。
#
# 这个命令的作用是将上述的配置信息保存到指定的kubeconfig文件中以便后续使用该文件进行认证和授权访问Kubernetes集群。kubectl config use-context kube-proxykubernetes --kubeconfig/etc/kubernetes/kube-proxy.kubeconfig
# 上述命令是使用kubectl命令来配置Kubernetes集群中的调度器组件。
#
# kubectl config use-context命令用于切换kubectl当前使用的上下文。上下文是Kubernetes集群、用户和命名空间的组合用于确定kubectl的连接目标。下面解释这个命令的不同部分
#
# - kube-proxykubernetes是一个上下文名称。它指定了使用kube-proxy用户和kubernetes命名空间的系统级别上下文。系统级别上下文用于操作Kubernetes核心组件。
#
# - --kubeconfig/etc/kubernetes/kube-proxy.kubeconfig用于指定Kubernetes配置文件的路径。Kubernetes配置文件包含连接到Kubernetes集群所需的身份验证和连接信息。
#
# 通过运行以上命令kubectl将使用指定的上下文和配置文件以便在以后的命令中能正确地与Kubernetes集群中的调度器组件进行交互。 3.2.8 创建ServiceAccount Key ——secret openssl genrsa -out /etc/kubernetes/pki/sa.key 2048
openssl rsa -in /etc/kubernetes/pki/sa.key -pubout -out /etc/kubernetes/pki/sa.pub# 这两个命令是使用OpenSSL工具生成RSA密钥对。
#
# 命令1openssl genrsa -out /etc/kubernetes/pki/sa.key 2048
# 该命令用于生成私钥文件。具体解释如下
# - opensslopenssl命令行工具。
# - genrsa生成RSA密钥对。
# - -out /etc/kubernetes/pki/sa.key指定输出私钥文件的路径和文件名。
# - 2048指定密钥长度为2048位。
#
# 命令2openssl rsa -in /etc/kubernetes/pki/sa.key -pubout -out /etc/kubernetes/pki/sa.pub
# 该命令用于从私钥中导出公钥。具体解释如下
# - opensslopenssl命令行工具。
# - rsa与私钥相关的RSA操作。
# - -in /etc/kubernetes/pki/sa.key指定输入私钥文件的路径和文件名。
# - -pubout指定输出公钥。
# - -out /etc/kubernetes/pki/sa.pub指定输出公钥文件的路径和文件名。
#
# 总结通过以上两个命令我们可以使用OpenSSL工具生成一个RSA密钥对并将私钥保存在/etc/kubernetes/pki/sa.key文件中将公钥保存在/etc/kubernetes/pki/sa.pub文件中。 3.2.9 将证书发送到其他master节点 #其他节点创建目录
# mkdir /etc/kubernetes/pki/ -pfor NODE in k8s-master02 k8s-master03; do for FILE in $(ls /etc/kubernetes/pki | grep -v etcd); do scp /etc/kubernetes/pki/${FILE} $NODE:/etc/kubernetes/pki/${FILE}; done; for FILE in admin.kubeconfig controller-manager.kubeconfig scheduler.kubeconfig; do scp /etc/kubernetes/${FILE} $NODE:/etc/kubernetes/${FILE}; done; done 3.2.10 查看证书 ls /etc/kubernetes/pki/
ll /etc/kubernetes/pki/
总用量 104
-rw-r--r--. 1 root root 1025 5月 26 15:48 admin.csr
-rw-------. 1 root root 1675 5月 26 15:48 admin-key.pem
-rw-r--r--. 1 root root 1444 5月 26 15:48 admin.pem
-rw-r--r--. 1 root root 1691 5月 26 15:46 apiserver.csr
-rw-------. 1 root root 1675 5月 26 15:46 apiserver-key.pem
-rw-r--r--. 1 root root 2082 5月 26 15:46 apiserver.pem
-rw-r--r--. 1 root root 1070 5月 26 15:45 ca.csr
-rw-------. 1 root root 1679 5月 26 15:45 ca-key.pem
-rw-r--r--. 1 root root 1363 5月 26 15:45 ca.pem
-rw-r--r--. 1 root root 1082 5月 26 15:47 controller-manager.csr
-rw-------. 1 root root 1679 5月 26 15:47 controller-manager-key.pem
-rw-r--r--. 1 root root 1501 5月 26 15:47 controller-manager.pem
-rw-r--r--. 1 root root 940 5月 26 15:46 front-proxy-ca.csr
-rw-------. 1 root root 1679 5月 26 15:46 front-proxy-ca-key.pem
-rw-r--r--. 1 root root 1094 5月 26 15:46 front-proxy-ca.pem
-rw-r--r--. 1 root root 903 5月 26 15:46 front-proxy-client.csr
-rw-------. 1 root root 1675 5月 26 15:46 front-proxy-client-key.pem
-rw-r--r--. 1 root root 1188 5月 26 15:46 front-proxy-client.pem
-rw-r--r--. 1 root root 1045 5月 26 15:49 kube-proxy.csr
-rw-------. 1 root root 1679 5月 26 15:49 kube-proxy-key.pem
-rw-r--r--. 1 root root 1464 5月 26 15:49 kube-proxy.pem
-rw-------. 1 root root 1704 5月 26 15:49 sa.key
-rw-r--r--. 1 root root 451 5月 26 15:49 sa.pub
-rw-r--r--. 1 root root 1058 5月 26 15:47 scheduler.csr
-rw-------. 1 root root 1675 5月 26 15:47 scheduler-key.pem
-rw-r--r--. 1 root root 1476 5月 26 15:47 scheduler.pem# 一共26个就对了
ls /etc/kubernetes/pki/ |wc -l
26 4.k8s系统组件配置 4.1.etcd配置 这个配置文件是用于 etcd 集群的配置其中包含了一些重要的参数和选项- name指定了当前节点的名称用于集群中区分不同的节点。
- data-dir指定了 etcd 数据的存储目录。
- wal-dir指定了 etcd 数据写入磁盘的目录。
- snapshot-count指定了触发快照的事务数量。
- heartbeat-interval指定了 etcd 集群中节点之间的心跳间隔。
- election-timeout指定了选举超时时间。
- quota-backend-bytes指定了存储的限额0 表示无限制。
- listen-peer-urls指定了节点之间通信的 URL使用 HTTPS 协议。
- listen-client-urls指定了客户端访问 etcd 集群的 URL同时提供了本地访问的 URL。
- max-snapshots指定了快照保留的数量。
- max-wals指定了日志保留的数量。
- initial-advertise-peer-urls指定了节点之间通信的初始 URL。
- advertise-client-urls指定了客户端访问 etcd 集群的初始 URL。
- discovery定义了 etcd 集群发现相关的选项。
- initial-cluster指定了 etcd 集群的初始成员。
- initial-cluster-token指定了集群的 token。
- initial-cluster-state指定了集群的初始状态。
- strict-reconfig-check指定了严格的重新配置检查选项。
- enable-v2启用了 v2 API。
- enable-pprof启用了性能分析。
- proxy设置了代理模式。
- client-transport-security客户端的传输安全配置。
- peer-transport-security节点之间的传输安全配置。
- debug是否启用调试模式。
- log-package-levels日志的输出级别。
- log-outputs指定了日志的输出类型。
- force-new-cluster是否强制创建一个新的集群。这些参数和选项可以根据实际需求进行调整和配置。 4.1.1master01配置 # 如果要用IPv6那么把IPv4地址修改为IPv6即可
cat /etc/etcd/etcd.config.yml EOF
name: k8s-master01
data-dir: /var/lib/etcd
wal-dir: /var/lib/etcd/wal
snapshot-count: 5000
heartbeat-interval: 100
election-timeout: 1000
quota-backend-bytes: 0
listen-peer-urls: https://192.168.1.41:2380
listen-client-urls: https://192.168.1.41:2379,http://127.0.0.1:2379
max-snapshots: 3
max-wals: 5
cors:
initial-advertise-peer-urls: https://192.168.1.41:2380
advertise-client-urls: https://192.168.1.41:2379
discovery:
discovery-fallback: proxy
discovery-proxy:
discovery-srv:
initial-cluster: k8s-master01https://192.168.1.41:2380,k8s-master02https://192.168.1.42:2380,k8s-master03https://192.168.1.43:2380
initial-cluster-token: etcd-k8s-cluster
initial-cluster-state: new
strict-reconfig-check: false
enable-v2: true
enable-pprof: true
proxy: off
proxy-failure-wait: 5000
proxy-refresh-interval: 30000
proxy-dial-timeout: 1000
proxy-write-timeout: 5000
proxy-read-timeout: 0
client-transport-security:cert-file: /etc/kubernetes/pki/etcd/etcd.pemkey-file: /etc/kubernetes/pki/etcd/etcd-key.pemclient-cert-auth: truetrusted-ca-file: /etc/kubernetes/pki/etcd/etcd-ca.pemauto-tls: true
peer-transport-security:cert-file: /etc/kubernetes/pki/etcd/etcd.pemkey-file: /etc/kubernetes/pki/etcd/etcd-key.pempeer-client-cert-auth: truetrusted-ca-file: /etc/kubernetes/pki/etcd/etcd-ca.pemauto-tls: true
debug: false
log-package-levels:
log-outputs: [default]
force-new-cluster: false
EOF 4.1.2master02配置 # 如果要用IPv6那么把IPv4地址修改为IPv6即可
cat /etc/etcd/etcd.config.yml EOF
name: k8s-master02
data-dir: /var/lib/etcd
wal-dir: /var/lib/etcd/wal
snapshot-count: 5000
heartbeat-interval: 100
election-timeout: 1000
quota-backend-bytes: 0
listen-peer-urls: https://192.168.1.42:2380
listen-client-urls: https://192.168.1.42:2379,http://127.0.0.1:2379
max-snapshots: 3
max-wals: 5
cors:
initial-advertise-peer-urls: https://192.168.1.42:2380
advertise-client-urls: https://192.168.1.42:2379
discovery:
discovery-fallback: proxy
discovery-proxy:
discovery-srv:
initial-cluster: k8s-master01https://192.168.1.41:2380,k8s-master02https://192.168.1.42:2380,k8s-master03https://192.168.1.43:2380
initial-cluster-token: etcd-k8s-cluster
initial-cluster-state: new
strict-reconfig-check: false
enable-v2: true
enable-pprof: true
proxy: off
proxy-failure-wait: 5000
proxy-refresh-interval: 30000
proxy-dial-timeout: 1000
proxy-write-timeout: 5000
proxy-read-timeout: 0
client-transport-security:cert-file: /etc/kubernetes/pki/etcd/etcd.pemkey-file: /etc/kubernetes/pki/etcd/etcd-key.pemclient-cert-auth: truetrusted-ca-file: /etc/kubernetes/pki/etcd/etcd-ca.pemauto-tls: true
peer-transport-security:cert-file: /etc/kubernetes/pki/etcd/etcd.pemkey-file: /etc/kubernetes/pki/etcd/etcd-key.pempeer-client-cert-auth: truetrusted-ca-file: /etc/kubernetes/pki/etcd/etcd-ca.pemauto-tls: true
debug: false
log-package-levels:
log-outputs: [default]
force-new-cluster: false
EOF 4.1.3master03配置 # 如果要用IPv6那么把IPv4地址修改为IPv6即可
cat /etc/etcd/etcd.config.yml EOF
name: k8s-master03
data-dir: /var/lib/etcd
wal-dir: /var/lib/etcd/wal
snapshot-count: 5000
heartbeat-interval: 100
election-timeout: 1000
quota-backend-bytes: 0
listen-peer-urls: https://192.168.1.43:2380
listen-client-urls: https://192.168.1.43:2379,http://127.0.0.1:2379
max-snapshots: 3
max-wals: 5
cors:
initial-advertise-peer-urls: https://192.168.1.43:2380
advertise-client-urls: https://192.168.1.43:2379
discovery:
discovery-fallback: proxy
discovery-proxy:
discovery-srv:
initial-cluster: k8s-master01https://192.168.1.41:2380,k8s-master02https://192.168.1.42:2380,k8s-master03https://192.168.1.43:2380
initial-cluster-token: etcd-k8s-cluster
initial-cluster-state: new
strict-reconfig-check: false
enable-v2: true
enable-pprof: true
proxy: off
proxy-failure-wait: 5000
proxy-refresh-interval: 30000
proxy-dial-timeout: 1000
proxy-write-timeout: 5000
proxy-read-timeout: 0
client-transport-security:cert-file: /etc/kubernetes/pki/etcd/etcd.pemkey-file: /etc/kubernetes/pki/etcd/etcd-key.pemclient-cert-auth: truetrusted-ca-file: /etc/kubernetes/pki/etcd/etcd-ca.pemauto-tls: true
peer-transport-security:cert-file: /etc/kubernetes/pki/etcd/etcd.pemkey-file: /etc/kubernetes/pki/etcd/etcd-key.pempeer-client-cert-auth: truetrusted-ca-file: /etc/kubernetes/pki/etcd/etcd-ca.pemauto-tls: true
debug: false
log-package-levels:
log-outputs: [default]
force-new-cluster: false
EOF 4.2.创建service所有master节点操作 4.2.1创建etcd.service并启动 cat /usr/lib/systemd/system/etcd.service EOF[Unit]
DescriptionEtcd Service
Documentationhttps://coreos.com/etcd/docs/latest/
Afternetwork.target[Service]
Typenotify
ExecStart/usr/local/bin/etcd --config-file/etc/etcd/etcd.config.yml
Restarton-failure
RestartSec10
LimitNOFILE65536[Install]
WantedBymulti-user.target
Aliasetcd3.serviceEOF
# 这是一个系统服务配置文件用于启动和管理Etcd服务。
#
# [Unit] 部分包含了服务的一些基本信息它定义了服务的描述和文档链接并指定了服务应在网络连接之后启动。
#
# [Service] 部分定义了服务的具体配置。在这里服务的类型被设置为notify意味着当服务成功启动时它将通知系统。ExecStart 指定了启动服务时要执行的命令这里是运行 /usr/local/bin/etcd 命令并传递一个配置文件 /etc/etcd/etcd.config.yml。Restart 设置为 on-failure意味着当服务失败时将自动重启并且在10秒后进行重启。LimitNOFILE 指定了服务的最大文件打开数。
#
# [Install] 部分定义了服务的安装配置。WantedBy 指定了服务应该被启动的目标这里是 multi-user.target表示在系统进入多用户模式时启动。Alias 定义了一个别名可以通过etcd3.service来引用这个服务。
#
# 这个配置文件描述了如何启动和管理Etcd服务并将其安装到系统中。通过这个配置文件可以确保Etcd服务在系统启动后自动启动并在出现问题时进行重启。 4.2.2创建etcd证书目录 mkdir /etc/kubernetes/pki/etcd
ln -s /etc/etcd/ssl/* /etc/kubernetes/pki/etcd/systemctl daemon-reload
# 用于重新加载systemd管理的单位文件。当你新增或修改了某个单位文件如.service文件、.socket文件等需要运行该命令来刷新systemd对该文件的配置。systemctl enable --now etcd.service
# 启用并立即启动etcd.service单元。etcd.service是etcd守护进程的systemd服务单元。systemctl restart etcd.service
# 重启etcd.service单元即重新启动etcd守护进程。systemctl status etcd.service
# etcd.service单元的当前状态包括运行状态、是否启用等信息。 4.2.3查看etcd状态 # 如果要用IPv6那么把IPv4地址修改为IPv6即可
export ETCDCTL_API3
etcdctl --endpoints192.168.1.43:2379,192.168.1.42:2379,192.168.1.41: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-outtable
---------------------------------------------------------------------------------------------------------------------------------
| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
---------------------------------------------------------------------------------------------------------------------------------
| 192.168.1.43:2379 | 29ba1a59fc9631ce | 3.5.13 | 20 kB | false | false | 4 | 14 | 14 | |
| 192.168.1.42:2379 | 987ed990c5d78aa4 | 3.5.13 | 20 kB | false | false | 4 | 14 | 14 | |
| 192.168.1.41:2379 | 3f3d8e1e5a05c016 | 3.5.13 | 20 kB | true | false | 4 | 14 | 14 | |
---------------------------------------------------------------------------------------------------------------------------------# 这个命令是使用etcdctl工具用于查看指定etcd集群的健康状态。下面是每个参数的详细解释
#
# - --endpoints指定要连接的etcd集群节点的地址和端口。在这个例子中指定了3个节点的地址和端口分别是192.168.1.43:2379,192.168.1.42:2379,192.168.1.41:2379。
# - --cacert指定用于验证etcd服务器证书的CA证书的路径。在这个例子中指定了CA证书的路径为/etc/kubernetes/pki/etcd/etcd-ca.pem。CA证书用于验证etcd服务器证书的有效性。
# - --cert指定用于与etcd服务器进行通信的客户端证书的路径。在这个例子中指定了客户端证书的路径为/etc/kubernetes/pki/etcd/etcd.pem。客户端证书用于在与etcd服务器建立安全通信时进行身份验证。
# - --key指定与客户端证书配对的私钥的路径。在这个例子中指定了私钥的路径为/etc/kubernetes/pki/etcd/etcd-key.pem。私钥用于对通信进行加密解密和签名验证。
# - endpoint status子命令用于检查etcd集群节点的健康状态。
# - --write-out指定输出的格式。在这个例子中指定以表格形式输出。
#
# 通过执行这个命令可以获取到etcd集群节点的健康状态并以表格形式展示。 5.高可用配置在Master服务器上操作 注意* 5.1.1 和5.1.2 二选一即可 选择使用那种高可用方案同时可以俩种都选用实现内外兼顾的效果比如5.1 的 NGINX方案实现集群内的高可用5.2 的 haproxy、keepalived 方案实现集群外访问 在《3.2.生成k8s相关证书》 若使用 nginx方案那么为 --serverhttps://127.0.0.1:8443若使用 haproxy、keepalived 那么为 --serverhttps://192.168.1.46:9443 5.1 NGINX高可用方案 5.1.1 进行编译 # 安装编译环境
yum install gcc -y# 下载解压nginx二进制文件
# wget http://nginx.org/download/nginx-1.25.3.tar.gz
tar xvf nginx-*.tar.gz
cd nginx-*# 进行编译
./configure --with-stream --without-http --without-http_uwsgi_module --without-http_scgi_module --without-http_fastcgi_module
make make install # 拷贝编译好的nginx
nodek8s-master02 k8s-master03 k8s-node01 k8s-node02
for NODE in $node; do scp -r /usr/local/nginx/ $NODE:/usr/local/nginx/; done# 这是一系列命令行指令用于编译和安装软件。
#
# 1. ./configure 是用于配置软件的命令。在这个例子中配置的软件是一个Web服务器指定了一些选项来启用流模块并禁用了HTTP、uwsgi、scgi和fastcgi模块。
# 2. --with-stream 指定启用流模块。流模块通常用于代理TCP和UDP流量。
# 3. --without-http 指定禁用HTTP模块。这意味着编译的软件将没有HTTP服务器功能。
# 4. --without-http_uwsgi_module 指定禁用uwsgi模块。uwsgi是一种Web服务器和应用服务器之间的通信协议。
# 5. --without-http_scgi_module 指定禁用scgi模块。scgi是一种用于将Web服务器请求传递到应用服务器的协议。
# 6. --without-http_fastcgi_module 指定禁用fastcgi模块。fastcgi是一种用于在Web服务器和应用服务器之间交换数据的协议。
# 7. make 是用于编译软件的命令。该命令将根据之前的配置生成可执行文件。
# 8. make install 用于安装软件。该命令将生成的可执行文件和其他必要文件复制到系统的适当位置以便可以使用该软件。
#
# 总之这个命令序列用于编译一个配置了特定选项的Web服务器并将其安装到系统中。 5.1.2 写入启动配置 在所有主机上执行 # 写入nginx配置文件
cat /usr/local/nginx/conf/kube-nginx.conf EOF
worker_processes 1;
events {worker_connections 1024;
}
stream {upstream backend {least_conn;hash $remote_addr consistent;server 192.168.1.41:6443 max_fails3 fail_timeout30s;server 192.168.1.42:6443 max_fails3 fail_timeout30s;server 192.168.1.43:6443 max_fails3 fail_timeout30s;}server {listen 127.0.0.1:8443;proxy_connect_timeout 1s;proxy_pass backend;}
}
EOF
# 这段配置是一个nginx的stream模块的配置用于代理TCP和UDP流量。
#
# 首先worker_processes 1;表示启动一个worker进程用于处理流量。
# 接下来events { worker_connections 1024; }表示每个worker进程可以同时处理最多1024个连接。
# 在stream块里面定义了一个名为backend的upstream用于负载均衡和故障转移。
# least_conn表示使用最少连接算法进行负载均衡。
# hash $remote_addr consistent表示用客户端的IP地址进行哈希分配请求保持相同IP的请求始终访问同一台服务器。
# server指令用于定义后端的服务器每个服务器都有一个IP地址和端口号以及一些可选的参数。
# max_fails3表示当一个服务器连续失败3次时将其标记为不可用。
# fail_timeout30s表示如果一个服务器被标记为不可用nginx将在30秒后重新尝试。
# 在server块内部定义了一个监听地址为127.0.0.1:8443的服务器。
# proxy_connect_timeout 1s表示与后端服务器建立连接的超时时间为1秒。
# proxy_pass backend表示将流量代理到名为backend的上游服务器组。
#
# 总结起来这段配置将流量代理到一个包含3个后端服务器的上游服务器组中使用最少连接算法进行负载均衡并根据客户端的IP地址进行哈希分配请求。如果一个服务器连续失败3次则将其标记为不可用并在30秒后重新尝试。# 写入启动配置文件
cat /etc/systemd/system/kube-nginx.service EOF
[Unit]
Descriptionkube-apiserver nginx proxy
Afternetwork.target
Afternetwork-online.target
Wantsnetwork-online.target[Service]
Typeforking
ExecStartPre/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/kube-nginx.conf -p /usr/local/nginx -t
ExecStart/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/kube-nginx.conf -p /usr/local/nginx
ExecReload/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/kube-nginx.conf -p /usr/local/nginx -s reload
PrivateTmptrue
Restartalways
RestartSec5
StartLimitInterval0
LimitNOFILE65536[Install]
WantedBymulti-user.target
EOF
# 这是一个用于kube-apiserver的NGINX代理的systemd单位文件。
#
# [Unit]部分包含了单位的描述和依赖关系。它指定了在network.target和network-online.target之后启动并且需要network-online.target。
#
# [Service]部分定义了如何运行该服务。Type指定了服务进程的类型forking表示主进程会派生一个子进程。ExecStartPre指定了在服务启动之前需要运行的命令用于检查NGINX配置文件的语法是否正确。ExecStart指定了启动服务所需的命令。ExecReload指定了在重新加载配置文件时运行的命令。PrivateTmp设置为true表示将为服务创建一个私有的临时文件系统。Restart和RestartSec用于设置服务的自动重启机制。StartLimitInterval设置为0表示无需等待可以立即重启服务。LimitNOFILE指定了服务的文件描述符的限制。
#
# [Install]部分指定了在哪些target下该单位应该被启用。
#
# 综上所述此单位文件用于启动和管理kube-apiserver的NGINX代理服务。它通过NGINX来反向代理和负载均衡kube-apiserver的请求。该服务会在系统启动时自动启动并具有自动重启的机制。# 设置开机自启systemctl daemon-reload
# 用于重新加载systemd管理的单位文件。当你新增或修改了某个单位文件如.service文件、.socket文件等需要运行该命令来刷新systemd对该文件的配置。
systemctl enable --now kube-nginx.service
# 启用并立即启动kube-nginx.service单元。kube-nginx.service是kube-nginx守护进程的systemd服务单元。
systemctl restart kube-nginx.service
# 重启kube-nginx.service单元即重新启动kube-nginx守护进程。
systemctl status kube-nginx.service
# kube-nginx.service单元的当前状态包括运行状态、是否启用等信息。 5.2 keepalived和haproxy 高可用方案 5.2.1安装keepalived和haproxy服务 systemctl disable --now firewalld
setenforce 0
sed -i s#SELINUXenforcing#SELINUXdisabled#g /etc/selinux/config
yum -y install keepalived haproxy 5.2.2修改haproxy配置文件配置文件一样 # cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bakcat /etc/haproxy/haproxy.cfgEOF
globalmaxconn 2000ulimit-n 16384log 127.0.0.1 local0 errstats timeout 30sdefaultslog globalmode httpoption httplogtimeout connect 5000timeout client 50000timeout server 50000timeout http-request 15stimeout http-keep-alive 15sfrontend monitor-inbind *:33305mode httpoption httplogmonitor-uri /monitorfrontend k8s-masterbind 0.0.0.0:9443bind 127.0.0.1:9443mode tcpoption tcplogtcp-request inspect-delay 5sdefault_backend k8s-masterbackend k8s-mastermode tcpoption tcplogoption tcp-checkbalance roundrobindefault-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100server k8s-master01 192.168.1.41:6443 checkserver k8s-master02 192.168.1.42:6443 checkserver k8s-master03 192.168.1.43:6443 check
EOF 参数 这段配置代码是指定了一个HAProxy负载均衡器的配置。下面对各部分进行详细解释
1. global:- maxconn 2000: 设置每个进程的最大连接数为2000。- ulimit-n 16384: 设置每个进程的最大文件描述符数为16384。- log 127.0.0.1 local0 err: 指定日志的输出地址为本地主机的127.0.0.1并且只记录错误级别的日志。- stats timeout 30s: 设置查看负载均衡器统计信息的超时时间为30秒。2. defaults:- log global: 使默认日志与global部分相同。- mode http: 设定负载均衡器的工作模式为HTTP模式。- option httplog: 使负载均衡器记录HTTP协议的日志。- timeout connect 5000: 设置与后端服务器建立连接的超时时间为5秒。- timeout client 50000: 设置与客户端的连接超时时间为50秒。- timeout server 50000: 设置与后端服务器连接的超时时间为50秒。- timeout http-request 15s: 设置处理HTTP请求的超时时间为15秒。- timeout http-keep-alive 15s: 设置保持HTTP连接的超时时间为15秒。3. frontend monitor-in:- bind *:33305: 监听所有IP地址的33305端口。- mode http: 设定frontend的工作模式为HTTP模式。- option httplog: 记录HTTP协议的日志。- monitor-uri /monitor: 设置监控URI为/monitor。4. frontend k8s-master:- bind 0.0.0.0:9443: 监听所有IP地址的9443端口。- bind 127.0.0.1:9443: 监听本地主机的9443端口。- mode tcp: 设定frontend的工作模式为TCP模式。- option tcplog: 记录TCP协议的日志。- tcp-request inspect-delay 5s: 设置在接收到请求后延迟5秒进行检查。- default_backend k8s-master: 设置默认的后端服务器组为k8s-master。5. backend k8s-master:- mode tcp: 设定backend的工作模式为TCP模式。- option tcplog: 记录TCP协议的日志。- option tcp-check: 启用TCP检查功能。- balance roundrobin: 使用轮询算法进行负载均衡。- default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100: 设置默认的服务器参数。- server k8s-master01 192.168.1.41:6443 check: 增加一个名为k8s-master01的服务器IP地址为192.168.1.41端口号为6443并对其进行健康检查。- server k8s-master02 192.168.1.42:6443 check: 增加一个名为k8s-master02的服务器IP地址为192.168.1.42端口号为6443并对其进行健康检查。- server k8s-master03 192.168.1.43:6443 check: 增加一个名为k8s-master03的服务器IP地址为192.168.1.43端口号为6443并对其进行健康检查。以上就是这段配置代码的详细解释。它主要定义了全局配置、默认配置、前端监听和后端服务器组的相关参数和设置。通过这些配置可以实现负载均衡和监控功能。 。。。。。。。略。。。。。。。 字数限制无法显示字数限制无法显示字数限制无法显示由于此平台字数限制文章内容已进行删减地址https://github.com/cby-chen/Kubernetes