好久没写文章了,最近由于需要在云平台搭建一个K8s集群,并在K8s上部署一个MySQL集群,在这个过程中遇到了挺多的问题,想着还是写一下吧,毕竟这些问题都挺麻烦的还。虽然有些解决的也不是很好吧,但勉强把服务搭起来了。这两篇文章重在记录搭建过程中遇到的各种问题。本篇文章将介绍K8s部分,MySQL部分的内容参考我的另一篇文章。
note:本文提供的只是一个简单版的步骤,完整版的步骤请自行前往k8s入门:裸机部署 k8s 集群与 K8s单机版部署。
两台服务器分别设置为master、node1
# master服务器
hostnamectl set-hostname master
# node1服务器
hostnamectl set-hostname node1
两台服务器均添加域名映射
vi /etc/hosts
#添加如下内容,其中前面为你的IP地址
192.168.123.5 master
192.168.123.6 node1
关闭SELinux、防火墙、swap分区(云服务器通常已默认关闭)
#临时关闭SELinux,永久关闭移步参考【1】
setenforce 0
#关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
#临时关闭swap分区,这里需要注意,虚拟机每次重启后都要关闭swap分区,或者直接永久关闭
swapoff -a
同步网络时间
几乎用不到,如果需要,自行移步k8s入门:裸机部署 k8s 集群
两台服务器都添加k8s的yum源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
安装docker
yum -y install yum-utils device-mapper-persistent-data lvm2
yum-config-manager -y --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum -y install docker-ce-18.06.3.ce-3.el7 docker-ce-cli-18.06.3.ce-3.el7 containerd.io
systemctl start docker
systemctl enable docker
设置国内docker仓库
cat <<EOF > /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://m24eqnhh.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload && systemctl restart docker # 重启完之后可使用 docker info 查看是否修改成功
安装kubernetes
yum install -y kubelet-1.23.1 kubeadm-1.23.1 kubectl-1.23.1
systemctl enable kubelet && systemctl start kubelet # 开机自启动并启动 kubelet 服务
kubeadm初始化集群(只在主节点跑)
note:记得修改为自己主节点的IP,同时只要失败就要使用kubeadm reset重置。
kubeadm init \
--apiserver-advertise-address=主节点的IP \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.23.1 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/16
对节点进行授权
①对master节点授权
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
source /etc/profile
②对slave节点(node1)授权
将master节点下的 /etc/kubernetes/admin.conf 拷贝至slave节点的/root/.kube/config
Slave节点加入
在node1节点上执行
kubeadm join 192.168.25.100:6443 --token b0t2j0.te29am3punpg93ir --discovery-token-ca-cert-hash sha256:90fbef8b3f2d63cb35127fdbc1214870bb9251858928c7647ce9d874a71d421b
note:这条命令由节点初始化后产生,需执行自己产生的相应命令。
安装网络插件Flannel
在主节点上执行
# 很有可能国内网络访问不到这个资源,你可以网上找找国内的源安装 flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 也可以使用如下方式安装 flannel 组件,先下载 yaml 文件
wget -c https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml
一些常用命令
#查看节点状态
kubectl get nodes
#查看已安装pod
kubectl get pods -A #查看所有pod
kubectl get pods -n kube-system #查看指定namespace下的Pod
kubernetes提供了丰富的api接口,允许大家通过api提供访问k8s服务。当然了,晚上确实能搜到各种各样的教程,但也确实是,不知道为什么,在我这里几乎不能用,最后,这里选择了一份实测能用的版本,分享给大家。
创建账户
apiVersion: v1
kind: ServiceAccount
metadata:
name: myuser
namespace: mysql
部署文件
kubectl create namespace mysql #创建名为mysql的namespace
kubectl apply -f CreateServiceAccount.yaml
将用户绑定相应的角色。这里我们只是测试环境,故直接绑定了cluster-admin,处于安全考虑,大家最好自己定义一个角色,再进行绑定。
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: myuser
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: myuser
namespace: mysql
部署
kubectl apply -f RoleBinding.yaml
# 获取到完整的name
kubectl get secret -n mysql | grep myuser
# 获取token
kubectl describe secret 上条命令查出的相应的名字 -n mysql |grep token
关于token的使用,无论是java还是postman,在网上的教程都挺多,也都可以用,大家自行百度即可
note:本文的重点部分,也是本文产生的主要原因。 k8s入门:裸机部署 k8s 集群中已经提供了一些可能遇到的问题,大家可以一起参考。
k8s搭建主要就是参考这两篇教程,搭建过程中遇到的问题,也主要是版本、配置的问题,k8s版本还是不宜过新,上面的安装过程已经对这两篇参考文献进行了整合,对其安装中的错误进行了修订,大家应该不会再遇到这两方面的问题了