部署环境为 centos7.9 , kubernetes 1.27
环境准备:
每一台设备都需要的操作:
1,更新源
修改 CentOS 操作系统的 YUM 软件源配置文件,将默认的镜像源地址替换为中国科技大学的镜像站点,并备份原始配置文件。
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/centos|g' \
-i.bak \
/etc/yum.repos.d/CentOS-Base.repo
yum -y update
-e
选项表示对文件进行多次编辑;s|^mirrorlist=|#mirrorlist=|g
表示将以mirrorlist=
开头的行注释掉,并以#mirrorlist=
开头的新行替换;s|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/centos|g
表示将以#baseurl=http://mirror.centos.org/centos
开头的行修改为以baseurl=https://mirrors.ustc.edu.cn/centos
开头的新行。-i.bak
选项表示在编辑时备份原始文件并使用.bak
扩展名保存。
2.关闭防火墙 dnsmap networkmanager swap selinux
setenforce 0
systemctl disable firewalld --now
systemctl disable dnsmasp --now
systemctl disable NetworkManager --now
swapoff -a && sysctl -w vm.swappiness=0 && sed -i "/swap/d" /etc/fstab
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
:将 SELinux 的执行模式设置为宽容模式(Permissive Mode)。systemctl disable firewalld --now
:禁用并停止 firewalld 防火墙服务。systemctl disable dnsmasq --now
:禁用并停止 dnsmasq DNS 服务。systemctl disable NetworkManager --now
:禁用并停止 NetworkManager 网络管理器服务。swapoff -a
:关闭所有交换空间。sysctl -w vm.swappiness=0
:将系统的交换空间使用比例调整为最低(0),减少对交换空间的使用。sed -i "/swap/d" /etc/fstab
:使用 sed 工具编辑/etc/fstab
文件,删除其中包含关于交换空间的行,从而实现永久关闭交换空间。-i
选项表示在原始文件上进行直接编辑。's/SELINUX=enforcing/SELINUX=disabled/g'
是sed的替换命令,将文件中所有出现的SELINUX=enforcing
替换为SELINUX=disabled
。/etc/selinux/config
是要编辑的文件路径。命令将禁用SELinux,在系统重启后仍然生效
3.设置时区和时间同步
将系统时区设置为中国上海(Asia/Shanghai)、安装和启用时间同步服务 Chrony
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo 'Asia/Shanghai' > /etc/timezone
yum -y install chrony
systemctl enable chronyd --now
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
:使用 ln 命令将/usr/share/zoneinfo/Asia/Shanghai
软链接到/etc/localtime
,以设置系统时区为中国上海。echo 'Asia/Shanghai' > /etc/timezone
:使用 echo 命令将Asia/Shanghai
写入/etc/timezone
文件中,以设置时区。yum -y install chrony
:使用 yum 包管理器安装 Chrony 时间同步服务。systemctl enable chronyd --now
:使用 systemctl 命令启用并立即启动 Chrony 服务,并使其开机自启动。
4.设置ulimit的值
open file值, 可以用ulimit -a 查看
ulimit -SHn 65535
ulimit
是一个用于设置和显示系统资源限制的命令。-S
选项表示对软限制进行操作。-H
选项表示对硬限制进行操作。n
表示文件描述符的数量限制。65535
是要设置的文件打开限制的值。
通过执行此命令,将文件打开限制设置为65535。您可以使用 ulimit -a
命令查看当前的资源限制设置,包括文件打开限制。
5.设置主机名
以下为示例
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl
是一个用于管理主机名和相关设置的命令。set-hostname
是一个指定要设置主机名的子命令。k8s-master
是要设置的新主机名。
6.添加hosts
cat >> /etc/hosts << EOF
192.168.44.17 k8s-master
192.168.44.18 k8s-nnode1
192.168.44.19 k8s-nnode2
192.168.44.20 k8s-testEOF
cat >> /etc/hosts
:使用cat
命令将输入附加到/etc/hosts
文件中。<< EOF
:表示输入的开始标记,在输入结束之前,所有行将被视为输入内容。IP0 k8s-master
:将 IP 地址与主机名k8s-master
关联。IP1 k8s-node1
:将 IP 地址与主机名k8s-node1
关联。IP2 k8s-node2
:将 IP 地址与主机名k8s-node2
关联。
通过执行此命令,将IP地址和主机名的映射添加到 /etc/hosts
文件中。请将 IP0
、IP1
和 IP2
替换为实际的 IP 地址,并确保主机名与相应的 IP 地址对应。
这样做可以在主机上建立静态的 IP 地址和主机名的映射关系,方便网络通信时直接使用主机名
7.ssh 密钥和公钥 生成和分发
#密钥生成
ssh-keygen -t rsa
#密钥分发
for i in 节点1名 节点2名 节点3名 ... ; do ssh-copy-id -i /root/.ssh/id_rsa.pub $i;done
通过执行此命令,将在当前用户的 .ssh
目录下生成一个新的RSA密钥对。通常,默认情况下会生成 id_rsa
(私钥)和 id_rsa.pub
(公钥)两个文件。您可以选择是否为密钥对设置密码。
ssh-keygen
是一个用于生成SSH密钥的命令。-t rsa
选项指定要使用RSA算法生成密钥对。
该命令通过迭代每个指定的节点,使用 ssh-copy-id
命令将您的公钥复制到每个节点上。以下是命令的解释:
for i in 节点1名 节点2名 节点3名 ... ; do
:循环迭代每个指定的节点。ssh-copy-id -i .ssh/id_rsa.pub $i
:使用ssh-copy-id
命令将您的公钥复制到当前节点 ($i
) 上。-i .ssh/id_rsa.pub
选项指定要复制的公钥文件路径。$i
表示当前迭代的节点名称。
8.系统更新
yum -y clean all
yum -y makecache
yum -y update
9.安装常用软件
yum -y install wget jq psmisc vim net-tools gcc curl bash-completion
wget
:用于通过HTTP、HTTPS和FTP下载文件的工具。jq
:一种轻量级的命令行JSON处理器,用于解析和转换JSON数据。psmisc
:包含一些有用的进程工具,如killall
和fuser
。vim
:一款功能强大的文本编辑器。net-tools
:包含一些网络工具,如ifconfig
、netstat
和ping
。gcc
:GNU C语言编译器,用于编译C语言代码。curl
:用于与服务器进行数据交互的命令行工具。bash-completion
:Bash命令自动完成的插件
10.关闭IPV6
vi /etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
10.让无内网IP主机能够访问外网
安装kubernetes
1.环境检查,交换分区,selinux,时间同步
free -m # 查看swap
getenforce # selinux
systemctl status chronyd #时间同步
2.添加kubernetes源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
创建一个名为 kubernetes.repo
的 YUM 仓库配置文件,并将其写入 /etc/yum.repos.d/
目录中
name
:设置 YUM 仓库的名称为 “Kubernetes”。baseurl
:定义 YUM 仓库的基础 URL,即从中安装 Kubernetes 软件包的位置。在这种情况下,使用的基础 URL 是 https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/。enabled
:将 YUM 仓库设为启用状态(值为 1),以便在后续使用 YUM 安装软件包时,该仓库可供选择。gpgcheck
和repo_gpgcheck
:这两个参数都设置为 0,以禁用 GPG 签名检查(因此,安装软件包时不会验证软件包的签名)。gpgkey
:定义了 RPM 包的 GPG 密钥文件的位置,以便进行软件包的 GPG 签名验证。在这种情况下,使用的密钥文件位于 https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg 和 https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg,都来自于阿里云的 Kubernetes YUM 仓库。
3.安装 Kubernetes 的 kubelet、kubeadm 和 kubectl 组件,以及 Docker 的 containerd 容器运行时。kubelet 和 containerd 将被设置为开机启动,并立即启动。
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet --now
yum -y install yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install containerd
systemctl enable containerd --now
yum install -y kubelet kubeadm kubectl
:使用 YUM 安装 Kubernetes 的 kubelet、kubeadm 和 kubectl 组件。-y
参数用于自动回答确认提示,加快安装过程。systemctl enable kubelet --now
:将 kubelet 服务设置为开机启动,并立即启动该服务。yum -y install yum-utils device-mapper-persistent-data lvm2
:使用 YUM 安装一些依赖项,包括 yum-utils、device-mapper-persistent-data 和 lvm2。yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
:向系统添加 Docker-CE 的 YUM 仓库配置文件。yum -y install containerd
:使用 YUM 安装 containerd 容器运行时。systemctl enable containerd --now
:将 containerd 服务设置为开机启动,并立即启动该服务。