k8s搭建 ————详细教程
1.准备三台机器
192.168.1.1 主节点
192.168.1.2 node1
192.168.1.3 node2
(所有节点运行)
hostnamectl set-hostname k8s-master
# 在192.168.1.2执行
hostnamectl set-hostname k8s-node1
# 在192.168.1.3执行
hostnamectl set-hostname k8s-node2
(所有节点运行)
同步时间
yum install chrony -y
systemctl start chronyd
systemctl enable chronyd
chronyc sources
#三台机器的时间必须同步,因为要同步数据关闭防火墙
(所有节点运行)
systemctl stop firewalld
systemctl disable firewalld
(所有节点运行)
关闭 swap
# 临时关闭;关闭swap主要是为了性能考虑
swapoff -a
# 可以通过这个命令查看swap是否关闭了
free
# 永久关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab
(所有节点运行)
# 临时关闭
setenforce 0
# 永久禁用
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
(所有节点运行)
为了让 Linux 节点的 iptables 能够正确查看桥接流量,请确认 sysctl 配置中的 net.bridge.bridge-nf-call-iptables 设置为 1
cat <
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
(所有节点运行)
# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
# 应用 sysctl 参数而不重新启动
sudo sysctl --system
(所有节点运行)
# 配置yum源
cd /etc/yum.repos.d ; mkdir bak; mv CentOS-Linux-* bak/
# centos7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# centos8
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
# 安装yum-config-manager配置工具
yum -y install yum-utils
# 设置yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装docker-ce版本
yum install -y docker-ce
# 启动
systemctl start docker
# 开机自启
systemctl enable docker
# 查看版本号
docker --version
# 查看版本具体信息
docker version
# Docker镜像源设置
# 修改文件 /etc/docker/daemon.json,没有这个文件就创建
# 添加以下内容后,重启docker服务:
cat >/etc/docker/daemon.json<
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://kho2j869.mirror.aliyuncs.com"]
}
EOF
# 加载
systemctl reload docker
# 查看
systemctl status docker containerd(kubelet1.24之后开始使用containerd)
(所有节点运行)
配置 k8s yum 源(所有节点)
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[k8s]
name=k8s
enabled=1
gpgcheck=0
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
EOF
(所有节点运行)
将 sandbox_image 镜像源设置为阿里云 google_containers 镜像源(所有节点)
# 导出默认配置,config.toml这个文件默认是不存在的
(注配置 containerd cgroup 驱动程序 systemd(所有节点)
kubernets 自v 1.24.0 后,就不再使用 docker.shim,替换采用 containerd 作为容器运行时端点。因此需要安装 containerd(在 docker 的基础下安装)
containerd config default > /etc/containerd/config.toml
grep sandbox_image /etc/containerd/config.toml
sed -i "s#k8s.gcr.io/pause#registry.aliyuncs.com/google_containers/pause#g" /etc/containerd/config.toml
grep sandbox_image /etc/containerd/config.toml
(所有节点运行)
sed -i 's#SystemdCgroup = false#SystemdCgroup = true#g' /etc/containerd/config.toml
# 应用所有更改后,重新启动containerd
systemctl restart containerd
(所有节点运行)
# 不指定版本就是最新版本,当前最新版就是1.24.1
yum install -y kubelet-1.24.1 kubeadm-1.24.1 kubectl-1.24.1 --disableexcludes=kubernetes
# disableexcludes=kubernetes:禁掉除了这个kubernetes之外的别的仓库
# 设置为开机自启并现在立刻启动服务 --now:立刻启动服务
systemctl enable --now kubelet
# 查看状态,这里需要等待一段时间再查看服务状态,启动会有点慢 (启动不成功 10000init 初始化顺带起来的)
systemctl status kubelet
(主节点运行即可)
10000:
kubeadm init
--apiserver-advertise-address=192.168.0.113
--image-repository registry.aliyuncs.com/google_containers
--kubernetes-version v1.24.1
--service-cidr=10.1.0.0/16
--pod-network-cidr=10.244.0.0/16
--v=5
出现以上代表成功配置
加入子节点(在子节点运行)
kubeadm join 192.168.1.1:6443 --token jcdduw.3wfskykjk7gwdf1u
--discovery-token-ca-cert-hash sha256:dd3cb5208a4ca032e85a5a30b9b02f963aff2fece13045cf8c74d7b9ed7f6098
再次查看systemctl status kubelet
# 临时生效(退出当前窗口重连环境变量失效)
export KUBECONFIG=/etc/kubernetes/admin.conf
# 永久生效(推荐)
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
安装 Pod 网络插件(CNI:Container Network Interface)(master)
你必须部署一个基于 Pod 网络插件的 容器网络接口 (CNI),以便你的 Pod 可以相互通信
# 最好提前下载镜像(所有节点)
docker pull quay.io/coreos/flannel:v0.14.0
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
主节点pod正常运行
节点全部正常
k8s搭建完成