架构图说明
在这里插入图片描述

1 准备环境
1.1 服务器要求:

建议最小硬件配置:2核CPU、2G内存、20G硬盘 服务器最好可以访问
外网,会有从网上拉取镜像需求,如果服务器不能上网,需要提前下载对应镜像并导入节点

1.2 软件环境:

软件 版本操作系统
CentOS7.9_x64$mini
Dockerce-20.10.17-3
Kubernetes1.23

1.3 服务器规划:

项目Value
master192.168.1.1
node1192.168.1.2
node2192.168.1.3

2 主机名解析(以下命令 所有节点都要执行)

编辑三台服务器的 /etc/hosts 文件 ,添加下面内容(master是主机名,可以自定义,原则是ip对应着主机名字):
192.168.1.1 master
192.168.1.2 node1
192.168.1.3 node2
2.1自定义主机名的命令

hostnamectl set-hostname  node1(node1是自定义的)

3 时间同步

#启动chronyd服务
#ln -sf /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime
#ntpdate -u ntp.aliyun.com && date
systemctl start chronyd
systemctl enable chronyd
date 

yum -y install ntp
ntpdate pool.ntp.org
systemctl start ntpd
date 

4 禁用selinux和firewalld服务

systemctl stop firewalld
systemctl disable firewalld
sed -i 's/enforcing/disabled/' /etc/selinux/config #重启后生效

5 禁用swap分区

free -m #查看状态
swapoff -a #临时
sed -ri "s/.swap./#&/" /etc/fstab   #永久,重启后生效

6 添加网桥过滤和地址转发功能

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

sysctl --system  #配置应用

7 安装docker
7.1 安装docker依赖

yum install -y yum-utils

7.2 设置docker仓库镜像地址

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

7.3 安装制定版本的docker

yum -y install docker-ce-20.10.17-3.el7

7.4 查看是否安装成功

yum list installed | grep docker

7.5 如果安装太高版本需要进行卸载再进行安装指定的版本(如果是20.10.17-3就不需要卸载重装了)

systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
yum -y install docker-ce-20.10.17-3.el7

7.6 设置置docker开机启动

systemctl enable docker && systemctl start docker

7.7 配置docker 镜像加速器

cat <<EOF> /etc/docker/daemon.json
{ 	
	"exec-opts": ["native.cgroupdriver=systemd"], 	
	"registry-mirrors": ["https://hub-mirror.c.163.com","https://registry.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn"]
 } 
EOF
#vi  /etc/docker/daemon.json
#输入以下内容
#{
# "registry-mirrors:#["https://rsbud4vc.mirror.aliyuncs.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com","http://qtid6917.mirror.aliyuncs.com", "https://rncxm540.mirror.aliyuncs.com"],
# "exec-opts":["native.cgroupdriver=systemd"]
#}

7.8 重启docker

systemctl restart docker

8 设置kubernetes镜像为国内的

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

9 安装指定版本 kubeadm,kubelet和kubectl

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

9.1 设置kubelet开机启动

systemctl enable kubelet
#查看kubelet日志
journalctl -xefu kubelet

10、部署主节点(仅在主节点执行该命令)

kubeadm init \
  --apiserver-advertise-address=192.168.1.1 \
  --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

–apiserver-advertise-address #集群通告地址(master 机器IP)
–image-repository #由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
–kubernetes-version #K8s版本,与上面安装的一致
–service-cidr #集群内部虚拟网络,Pod统一访问入口
–pod-network-cidr #Pod网络,与下面部署的CNI网络组件yaml中保持一致

10.1 创建必要的文件

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

10.2 从节点执行添加的命令,这个加入命令是主节点初始化完成后生成的

kubeadm join 192.168.2.1:6443 --token pgky90.8bvtgc8y201aw9cs --discovery-token-ca-cert-hash sha256:7a29ef807f5e4a8479e77a9f497ffa6bd28718fe70a69d589cbdc4cf278dc471

10.3 默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token

kubeadm token create --print-join-command

11、部署容器网络(CNI),这个给各个组件进行通信使用的
可以通过链接下载,下载不了从我分享的百度云链接进行下载。

wget  https://docs.projectcalico.org/manifests/calico.yaml

链接:https://pan.baidu.com/s/1JCY5m9_26sogfdc5bo1RZw
提取码:uyge

11.1 创建CNI

kubectl apply -f calico.yaml

11.2 查看节点状态,在主节点上执行

kubectl get  nodes
kubectl get  pod -A

11.3 查看通信状态

kubectl get pods -n kube-system -w(-w可以不带)

12、创建测试的应用

vi nginx.yaml

在 nginx.yaml粘贴以下内容

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx 

创建nginx应用

kubectl apply -f nginx.yaml

创建nginx外网服务应用

vi nginx-service.yaml

输入

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  type: NodePort
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

创建nginx外网服务应用

kubectl apply -f nginx-service.yaml

浏览器打开nginx启动页,出现以下页面说明成功
在这里插入图片描述
部署mysql的脚本:

apiVersion: apps/v1
kind: Deployment # 
metadata:
  name: mysql #名称,全局唯一
  namespace: default # 默认空间
spec:
  replicas: 1 #Pod 副本的期待数量
  selector:
    matchLabels:
      app: mysql # 符合目标的Pod拥有此标签
  template: # 根据此模版创建Pod的副本
    metadata:
      labels:
        app: mysql # Pod副本拥有的标签,对应Selector
    spec:
      containers: # Pod的内容的定义部分
        - name: mysql # 容器的名称
          image: mysql # 容器对应的Docker Image
          ports:
            - containerPort: 3306 # 容器应用监听的端口号
          env:
            - name: MYSQL_ROOT_PASSWORD # 设置mysql的初始化密码
              value: "123456" # 设置mysql的初始化密码
---
apiVersion: v1
kind: Service # 表明是Kubernetes Service
metadata:
  name: mysql # Service 的全局唯一名称
spec:
  type: NodePort
  selector:
    app: mysql
  ports: # Service 提供服务的端口
    - port: 3306 # Service 对应的Pod拥有这里定义的标签
            targetPort: 3306
            nodePort: 30306

12 移除节点,扩展知识(这一步,不要执行)
12.1 在主节点执行

kubectl drain node1 --delete-local-data --force --ignore-daemonsets

12.2 删除节点

kubectl delete node node1

12.3 重启kubeadm (有报错自己百度)

kubeadm reset
输入y

13、集群重启

systemctl status kubelet
#首先检查服务是否启动有无报错,查看状态是否是running
#重新声明环境变量
ll /etc/kubernetes/admin.conf                                               
#查看文件是否存在,如果不存在执行下面的步骤
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile     
 #重新写入环境变量
source ~/.bash_profile

#containerd容器解决方案
#尝试重启kubelet测试是否可以重新恢复正常
systemctl restart kubelet       
#查看kubelet的日志,里面寻找相应报错                                
journalctl -xefu kubelet          
 #根据iomp版本是用docker或者nerdctl,来查看k8s容器状态                              
nerdctl -n k8s.io ps 

#首先确认aip-server有没有挂,如果挂了去查看日志
nerdctl -n k8s.io ps | grep kube-apiserver
docker ps -a | grep     kube-apiserver
cd /var/log/pods/kube-system_kube-apiserver   #根据相应日志去处理对应问题

 #接着确认etcd是否挂了,可以去查看相应的报错日志
docker ps -a | grepetcd
nerdctl -n k8s.io ps | grep etcd
cd /var/log/pods/kube-system_etcd        #根据相应日志去处理对应问题

安装kuboard的官方链接(小公司推荐这个去管理k8s集群。rancher比较耗费资源,而且主机重启坑比较多):

https://kuboard.cn/install/v3/install-in-k8s.html

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐