搭建Kubernetes集群
提示:文章相关组件尽可能查看官方文档,可能会有所改动
文章目录
- 前言
- 一、服务器搭建
- 二、配置Docker环境
- 三、修改服务器配置
- (一)修改三台机器的hostname及hosts文件
- (1)修改hostname
- (2)修改hosts文件
- (二)关闭防火墙和关闭SELinux
- (1)关闭防火墙
- (2)关闭SELinux
- (三)所有节点关闭swap
- (四)设置系统参数
- (五)安装 cri-dockerd
- (1)官方下载地址
- (2)上传文件并安装
- (3)指定依赖镜像地址
- 四、搭建K8S集群环境
- (一)配置Kubernetes的yum镜像源
- (二)安装 kubelet kubeadm kubectl
- (三)Kubernetes集群初始化
- (四)初始化部署容器网络(CNI)
- (五)部署 Dashboard
- 总结
前言
提示:本次搭建环境是基于CentOS8环境搭建:
Kubernetes(简称,K8S)是Google开源的容器集群管理系统,在Docker技术的基础上,为容器化的 应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的 便捷性。 其主要功能如下:
1.使用 Docker对应用程序包装(package)、实例化(instantiate)、运行(run)。 以集群的方式运行、管理跨机器的容器。
2.以集群的方式运行、管理跨机器的容器。
3.解决 Docker跨机器容器之间的通讯问题。解决Docker跨机器容器之间的通讯问题。
4.Kubernetes 的自我修复机制使得容器集群总是运行在用户期望的状态
提示:以下是本篇文章正文内容,下面案例可供参考
一、服务器搭建
准备三台CentOS虚拟机,并且保证虚拟机能够连接上网络。并且配置好固定的IP地址,如果是在正式服务器上,后续直接使用内网地址,保证三台机器能连通。
确定自己虚拟机版本号
cat /etc/os-release
更新本地YUM镜像源,以及系统软件。
yum update
如果报错如下:
进入yum镜像源目录
cd /etc/yum.repos.d
将如下系统的镜像源备份,重新下载阿里云镜像源
备份
mkdir ./backip
mv ./*repo ./backup
下载新的镜像源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
重新加载yum数据源
yum clean all
dnf makecache
yum update
二、配置Docker环境
安装Docker 查看博主Docker专栏,有关Docker安装教程
在此文件下:
/etc/docker/daemon.json
添加如下配置:
"exec-opts": ["native.cgroupdriver=systemd"]
重新加载配置文件
sudo systemctl daemon-reload
重启docker
systemctl restart docker
三、修改服务器配置
(一)修改三台机器的hostname及hosts文件
(1)修改hostname
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2
bash
(2)修改hosts文件
sudo bash -c 'cat >> /etc/hosts << EOF
172.16.3.226 k8s-master
172.16.3.224 k8s-node1
172.16.3.225 k8s-node2
EOF'
(二)关闭防火墙和关闭SELinux
(1)关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld
(2)关闭SELinux
setenforce 0 #临时关闭 ,重启服务器后失效
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久关闭
查看是否已经关闭
vim /etc/selinux/config
(三)所有节点关闭swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
vim /etc/fstab
(四)设置系统参数
设置允许路由转发,不对bridge的数据进行处理
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system # 使其参数生效
(五)安装 cri-dockerd
(1)官方下载地址
https://github.com/Mirantis/cri-dockerd/releases
(2)上传文件并安装
创建安装包目录文件,上传到该文件下,方便管理
mkdir /opt/install
安装
rpm -ivh cri-dockerd-0.3.14-3.el8.x86_64.rpm
(3)指定依赖镜像地址
vim /usr/lib/systemd/system/cri-docker.service
unix:///var/run/cri-dockerd.sock --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
重新加载配置文件
systemctl daemon-reload
启动 cri-docker
systemctl enable cri-docker && systemctl start cri-docker
查看 cri-docker 是否启动成功
systemctl status cri-docker
四、搭建K8S集群环境
(一)配置Kubernetes的yum镜像源
现在kubernetes 的CentOS8的镜像源是用的CentOS7的,不影响下载
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
重新加载源数据
dnf makecache
(二)安装 kubelet kubeadm kubectl
Kubernetes 官方网站:
https://kubernetes.io/
Kubernetes 官方文档:
https://kubernetes.io/zh-cn/docs/home/
安装
yum install -y kubelet kubeadm kubectl
设置开机自启动。先别急着启动
systemctl enable kubelet
查看版本号
kubelet --version
(三)Kubernetes集群初始化
kubeadm init \
--apiserver-advertise-address=172.16.3.226 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.28.2 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--cri-socket=unix:///var/run/cri-dockerd.sock \
--ignore-preflight-errors=all
kubeadm join 172.16.3.226:6443 --token ek1so5.3dkiv339qj0i8q2f \
--discovery-token-ca-cert-hash sha256:cd32e3e588ebabd3a07632966e4f556ed59ee8bd17707d24aa38c855a731e3cd
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes
kubectl get nodes
加入Kubernetes Node
kubeadm join 172.16.3.226:6443 --token ek1so5.3dkiv339qj0i8q2f \
--discovery-token-ca-cert-hash sha256:cd32e3e588ebabd3a07632966e4f556ed59ee8bd17707d24aa38c855a731e3cd --cri-socket=unix:///var/run/cri-dockerd.sock
(四)初始化部署容器网络(CNI)
Calico是一个纯三层的数据中心网络方案,是目前Kubernetes主流的网络方案
官方部署文档:https://docs.tigera.io/calico/latest/getting-started/kubernetes/quickstart
创建部署资源:
kubectl create -f tigera-operator.yaml
kubectl create -f custom-resources.yaml
应用启动完成后,查看Pod状态
kubectl get pods -n calico-system
(五)部署 Dashboard
Dashboard是官方提供的一个UI,可用于基本管理K8s资源
YAML下载地址:
https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
修改文件端口号以及type
执行如下命令
kubectl apply -f kubernetes-dashboard.yaml
kubectl get pods -n kubernetes-dashboard
浏览器访问:主节点(Master)IP地址:30001
创建service account并绑定默认cluster-admin管理员集群角色:
# 创建用户
kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard
# 用户授权
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin
# 获取用户Token
kubectl create token dashboard-admin -n kubernetes-dashboard
看到下面这个页面就集群成功了
简单做一个Nginx集群部署测试一下我们搭建的环境
浏览器能打开Nginx就证明环境成功搭建
总结
以上就是搭建K8s集群环境的步骤