前言:因为工作需要学习k8s,看了很多大神的文章后,自己终于动手成功部署了k8s简化版集群,仅供学习参考,如有侵权,联系删除。

1、部署k8s的方式:

本实验采用kubeadm的方式搭建集群。

简单介绍:Kubeadm是一个K8s部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。

2、环境准备

服务器硬件配置:不低于2核CPU、2G内存、20G硬盘

网络环境:服务器最好可以访问外网,会有从网上拉取镜像需求

操作系统:centos7.9(最小化安装)

软件版本:Docker:20-ce ;K8s:1.23

服务器IP规划:(本实验采用VMware虚拟机)

192.168.1.38       k8s-master

192.168.1.39       k8s-node1

192.168.1.40       k8s-node2

注:可以先在master节点进行初始化配置,然后克隆出node1和node2节点,节省时间。

3、初始化配置

3.1、安装环境准备:

# 关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

# 永久关闭selinux

sed -i 's/enforcing/disabled/' /etc/selinux/config

# 永久关闭swap

sed -ri 's/.*swap.*/#&/' /etc/fstab

# 开启流量转发

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

# 新配置生效

sysctl --system

3.2 、配置阿里云yum源

# 配置CentOS-Base源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

# 配置docker-ce源

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

# 配置kubernetes源

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[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

# 清理之前的yum缓存

yum clean all

# 生成新的缓存

yum makecache

# 更新yum源

yum update

3.3、安装相关软件包

# 安装docker-ce

yum -y install docker-ce

k8s postgresql集群 k8s集群部署使用_容器

 # 设置开机自启

systemctl enable docker.service --now

k8s postgresql集群 k8s集群部署使用_kubernetes_02

 # 配置阿里云镜像仓库

cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

# 重启docker服务

systemctl restart docker

#查看确认docker仓库信息

docker info

k8s postgresql集群 k8s集群部署使用_kubernetes_03

 # 安装kubeadm、kubelet、kubectl,并将kubelet设置开机自启

yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
systemctl enable kubelet

k8s postgresql集群 k8s集群部署使用_k8s postgresql集群_04

# 安装rsync和ntpdate

yum -y install ntpdate
yum -y install rsync.x86_64

 

k8s postgresql集群 k8s集群部署使用_kubernetes_05

 4、以master为模板克隆出node1和node2

# 将master节点虚拟机关机

# 虚拟机→管理→克隆→创建完整克隆

k8s postgresql集群 k8s集群部署使用_容器_06

 # 将master、node1、node2节点全部开机并查看IP地址

# 在master添加hosts

cat >> /etc/hosts << EOF
192.168.1.38 k8s-master
192.168.1.39 k8s-node1
192.168.1.40 k8s-node2
EOF

# 将master上hosts文件传送给node1和node2

rsync -av /etc/hosts root@192.168.1.39:/etc/

rsync -av /etc/hosts root@192.168.1.40:/etc/

k8s postgresql集群 k8s集群部署使用_k8s postgresql集群_07

# 时间同步操作三个节点都需进行

注:虚拟机不管关机还是挂起,每次重新操作都需要更新时间进行同步。

ntpdate time.windows.com

k8s postgresql集群 k8s集群部署使用_k8s postgresql集群_08

 5、部署k8s-master(在master节点执行)

--apiserver-advertise-address 集群通告地址

--image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址

--kubernetes-version K8s版本,与上面安装的一致

--service-cidr 集群内部虚拟网络,Pod统一访问入口

--pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致  

kubeadm init \
  --apiserver-advertise-address=192.168.1.38 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.23.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
  --ignore-preflight-errors=all

k8s postgresql集群 k8s集群部署使用_kubernetes_09

 

k8s postgresql集群 k8s集群部署使用_kubernetes_10

 # 按照安装成功的提示输入命令,拷贝k8s认证文件

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 查看node节点

kubectl get nodes

k8s postgresql集群 k8s集群部署使用_kubernetes_11

 6、配置k8s的node节点(node节点操作)

# 向集群添加新节点,node1和node2都需执行kubeadm join命令

kubeadm join 192.168.1.38:6443 --token 9520ih.k0f6fspxfzl0u481 \
>         --discovery-token-ca-cert-hash sha256:f4872c506f130f9f1e99ae1addac079622f6ff825019e5e2577fd94ec9a2c7c7

k8s postgresql集群 k8s集群部署使用_容器_12

 

k8s postgresql集群 k8s集群部署使用_docker_13

 注:默认token有效期为24小时,过期之后,该token就无法使用。

# 重新创建token命令

kubeadm token create --print-join-command

7、部署容器网络 (master节点执行)

Calico是一个纯三层的数据中心网络方案,是目前Kubernetes主流的网络方案。

# 下载calico.yaml文件

curl https://docs.projectcalico.org/v3.18/manifests/calico.yaml -O

k8s postgresql集群 k8s集群部署使用_kubernetes_14

 注:下载calico.yaml文件遇到各种问题,这是查看各种大神文章中评论中给的建议,目前可以使用。

# 修改calico.yaml文件里面定义Pod网络(CALICO_IPV4POOL_CIDR),与前面kubeadm init的 --pod-network-cidr指定的一样10.244.0.0/16,取消注释。

k8s postgresql集群 k8s集群部署使用_k8s postgresql集群_15

 # 使用kubectl 运行yaml文件

kubectl apply -f calico.yaml

k8s postgresql集群 k8s集群部署使用_kubernetes_16

 # 查看pod是否全部running,需要等一会

kubectl get pods -n kube-system

k8s postgresql集群 k8s集群部署使用_kubernetes_17

 # Calico Pod都Running后,node节点也会准备就绪

kubectl get nodes

k8s postgresql集群 k8s集群部署使用_kubernetes_18

 8、部署Dashboard

# Dashboard是官方提供的一个web管理界面,可用于基本管理K8s资源

# 下载yaml文件

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml

k8s postgresql集群 k8s集群部署使用_docker_19

 # 默认Dashboard只能集群内部访问,需要修改Service为NodePort类型,暴露到外部

vim recommended.yaml

k8s postgresql集群 k8s集群部署使用_kubernetes_20

 # 执行修改后的yaml文件

kubectl apply -f recommended.yaml

k8s postgresql集群 k8s集群部署使用_kubernetes_21

 # 查看pod是否运行起来

kubectl get pods -n kubernetes-dashboard

k8s postgresql集群 k8s集群部署使用_k8s postgresql集群_22

 # 访问地址:https://IP:30001

k8s postgresql集群 k8s集群部署使用_k8s postgresql集群_23

 # 创建service account并绑定默认cluster-admin管理员集群角色

# 创建用户

kubectl create serviceaccount dashboard-admin -n kube-system

# 用户授权

kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

k8s postgresql集群 k8s集群部署使用_kubernetes_24

# 获取用户Token

kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

k8s postgresql集群 k8s集群部署使用_k8s postgresql集群_25

 # 使用输出的token登录Dashboard

k8s postgresql集群 k8s集群部署使用_kubernetes_26