CentOS部署K8s集群步骤与问题汇总

CentOS部署K8s集群步骤与问题汇总

  • 前言
  • K8S的集群部署
    • 1. 设置基础环境
    • 2. 部署K8s
      • 2.1 换源
      • 2.2 安装
      • 2.3 启动
      • 2.3 完成
    • 3 使用api访问k8s
      • 3.1 CreateServiceAccount.yaml
      • 3.2 RoleBinding.yaml
      • 3.3 获取token
      • 3.4 使用token
    • 4 遇到的问题
  • 参考

前言

        好久没写文章了,最近由于需要在云平台搭建一个K8s集群,并在K8s上部署一个MySQL集群,在这个过程中遇到了挺多的问题,想着还是写一下吧,毕竟这些问题都挺麻烦的还。虽然有些解决的也不是很好吧,但勉强把服务搭起来了。这两篇文章重在记录搭建过程中遇到的各种问题。本篇文章将介绍K8s部分,MySQL部分的内容参考我的另一篇文章。

K8S的集群部署

        note:本文提供的只是一个简单版的步骤,完整版的步骤请自行前往k8s入门:裸机部署 k8s 集群与 K8s单机版部署。

1. 设置基础环境

两台服务器分别设置为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 集群

2. 部署K8s

2.1 换源

两台服务器都添加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

2.2 安装

安装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 服务

2.3 启动

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

2.3 完成

一些常用命令

#查看节点状态
kubectl get nodes
#查看已安装pod
kubectl get pods -A #查看所有pod
kubectl get pods -n kube-system #查看指定namespace下的Pod

3 使用api访问k8s

kubernetes提供了丰富的api接口,允许大家通过api提供访问k8s服务。当然了,晚上确实能搜到各种各样的教程,但也确实是,不知道为什么,在我这里几乎不能用,最后,这里选择了一份实测能用的版本,分享给大家。

3.1 CreateServiceAccount.yaml

创建账户

apiVersion: v1
kind: ServiceAccount
metadata:
  name: myuser
  namespace: mysql

部署文件

kubectl create namespace mysql #创建名为mysql的namespace
kubectl apply -f CreateServiceAccount.yaml

3.2 RoleBinding.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

3.3 获取token

# 获取到完整的name
kubectl get secret -n mysql | grep myuser
# 获取token
kubectl  describe secret 上条命令查出的相应的名字 -n mysql |grep token

3.4 使用token

关于token的使用,无论是java还是postman,在网上的教程都挺多,也都可以用,大家自行百度即可

4 遇到的问题

        note:本文的重点部分,也是本文产生的主要原因。 k8s入门:裸机部署 k8s 集群中已经提供了一些可能遇到的问题,大家可以一起参考。
        k8s搭建主要就是参考这两篇教程,搭建过程中遇到的问题,也主要是版本、配置的问题,k8s版本还是不宜过新,上面的安装过程已经对这两篇参考文献进行了整合,对其安装中的错误进行了修订,大家应该不会再遇到这两方面的问题了

参考

  1. k8s入门:裸机部署 k8s 集群
  2. K8s单机版部署
  3. kubernetes(k8s) API调用方式

你可能感兴趣的:(随笔,centos,kubernetes,linux)