> 文档中心 > K8s单机架构部署

K8s单机架构部署

这是我做了很多遍,参考很多文章得到的,为了便于大家参考和学习,我已经把每一步都整理出来了,步骤和提示都很清晰。
后续文档有什么问题那个地方写错了,大家都可以提出来。
在这里插入图片描述

文章目录

  • 一、 准备工作
    • 1. 确认环境
    • 2.开放端口
    • 3.允许iptables检查桥接流量
  • 二、安装
    • 1.安装kubeadm、kubelet、kubectl
    • 2. 安装插件
    • 3. 部署docker
    • 4. 修改docker组件为systemd
    • 5. k8s拉取镜像
    • 6. 安装启动
    • 7. 安装flannel
    • 8. 验证
    • 9. 异常处理
    • 10.重启后k8s异常处理

在这里插入图片描述

一、 准备工作

1. 确认环境

swapoff -a  //关闭swapsetenforce 0 //临时关闭selinux

每台机器的ip和uuid不能一样

cat /sys/class/dmi/id/product_uuid //每台机器的uuid不能相同ifconfig -a   //ip不能相同

2.开放端口

协议方向端口范围作用使用者TCP入站6443Kubernetes API服务器所有组件TCP入站2379-2380etcd 服务器客户端APIKube-apiserver,etcdTCP入站10250Kubelet APTKubelet自身,控制平面组件TCP入站10251Kube-schedulerKube-scheduler自身TCP入站10252Kube-controller-managerKube-controller-manager自身TCP入站8080kubeletKubelet自身TCP入站30000-32767Node Port服务器所有组件

端口号一定要安排明白!!!!否者会出现类似dial tcp 10.96.0.1:443: connect: no route to
host错误,如果测试环境一直弄不好,可以关闭防火墙。ps:及其不建议。

3.允许iptables检查桥接流量

cat <<EOF | sudo tee /etc/modules-load.d/k8s.confbr_netfilterEOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOF
sudo sysctl --system初始化

二、安装

1.安装kubeadm、kubelet、kubectl

添加镜像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=0 repo_gpgcheck=0 EOF#将 SELinux 设置为 permissive 模式(相当于将其禁用)sudo setenforce 0sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/configsudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes  下载镜像sudo systemctl enable --now kubelet //查看是否安装成功kubeadm versionkubectl version --clientkubelet --version

2. 安装插件

yum -y install socat conntrack-tools

3. 部署docker

在服务器上准备在线镜像源,然后添加docker的镜像源,如果之前安装过需要先卸载。

#安装依赖包[root@docker ~]# yum install -y yum-utils device-mapper-persistent-data lvm2#添加华为云的docker镜像地址[root@docker ~]# yum-config-manager --add-repo https://repo.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo更新缓存,只处理新添加的yum源缓存[root@docker ~]# yum makecache fast#安装docker,默认安装最新版本[root@docker ~]# yum -y install docker-ce#查看安装docker版本[root@docker ~]# docker --version(或者使用docker version)Docker version 20.10.7, build f0df350[root@docker ~]# systemctl start docker

4. 修改docker组件为systemd

sudo mkdir /etc/dockercat <<EOF | sudo tee /etc/docker/daemon.json{  "exec-opts": ["native.cgroupdriver=systemd"],  "log-driver": "json-file",  "log-opts": {    "max-size": "100m"  },  "storage-driver": "overlay2"}EOF sudo systemctl enable dockersudo systemctl daemon-reloadsudo systemctl restart docker

5. k8s拉取镜像

先查看要拉取的镜像

kubeadm config images listk8s.gcr.io/kube-apiserver:v1.22.2k8s.gcr.io/kube-controller-manager:v1.22.2k8s.gcr.io/kube-scheduler:v1.22.2k8s.gcr.io/kube-proxy:v1.22.2k8s.gcr.io/pause:3.5k8s.gcr.io/etcd:3.5.0-0k8s.gcr.io/coredns/coredns:v1.8.4

写成脚本,版本根据自己的要求来写

vim k8s.sh#!/bin/bashimages=(    kube-apiserver:v1.22.2    kube-controller-manager:v1.22.2    kube-scheduler:v1.22.2    kube-proxy:v1.22.2    pause:3.5    etcd:3.5.0-0    coredns:v1.8.4)for imageName in ${images[@]} ; do    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/${imageName}    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/${imageName} k8s.gcr.io/${imageName}    docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/${imageName}donedocker tag k8s.gcr.io/coredns:v1.8.4  k8s.gcr.io/coredns/coredns:v1.8.4docker rmi k8s.gcr.io/coredns:v1.8.4给脚本加权限chmod -R 777 k8s.sh执行脚本,默默的等待拉取./k8s.sh完了看镜像是否拉取成功docker images

6. 安装启动

1. 修改主机映射(根据自己的ip设置)

vi /etc/hosts

K8s单机架构部署

2. 初始化服务(根据自己的ip和网段和版本来设置)

kubeadm init --apiserver-advertise-address=192.168.2.80 --pod-network-cidr=192.168.0.0/16 --kubernetes-version=v1.22.2 |tee kubeadmin-init.log

出现一下字样就是初始化成功
在这里插入图片描述

3. 注意

要使非 root 用户可以运行 kubectl,请运行以下命令, 它们也是 kubeadm init 输出的一部分:

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

或者,如果你是root 用户,则可以运行:

export KUBECONFIG=/etc/kubernetes/admin.conf

如果想重新初始化,可执行kubeadm reset

直接给它放到环境变量中,以免关闭服务器后重新启动出现访问不到8080端口这个问题。

vim /etc/profile#放到最后面export KUBECONFIG=/etc/kubernetes/admin.conf

7. 安装flannel

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

如果出现Connecting to raw.githubusercontent.com refused,可以执行vi /etc/hosts
在后面添加199.232.96.133 raw.githubusercontent.com
K8s单机架构部署

8. 验证

kubectl get nodes

K8s单机架构部署

如果出现ready则代表安装完成,master节点已经注册到了k8s。

9. 异常处理

如果出现NotReady,可以执行以下语句判断服务器状态。

kubectl get nodes -o yaml

以下绿色部分没有问题,红色部分异常message:docker: network plugin is not ready: cni
config uninitialized。

在这里插入图片描述

如果出现以上问题 查看日志。

journalctl -f -u kubelet.service

如果出现以下日志。

“Error validating CNI config list” configList="{\n “name”:
“cbr0”,\n “cniVersion”: “0.3.1”,\n “plugins”: [\n {\n
“type”: “flannel”,\n “delegate”: {\n
“hairpinMode”: true,\n “isDefaultGateway”: true\n }\n
},\n {\n “type”: “portmap”,\n “capabilities”: {\n
“portMappings”: true\n }\n }\n ]\n}\n" err="[failed to find
plugin “flannel” in path [/opt/cni/bin] failed to find plugin
“portmap” in path [/opt/cni/bin]]"

执行以下命令即可

cat <<EOF > /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=1repo_gpgcheck=1gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOFyum clean allyum install kubernetes-cni -y

10.重启后k8s异常处理

重启后查看nodes节点,或者其他

[root@kubernetes ~]# kubectl get nodes

K8s单机架构部署

解决:写到环境里

bashvim /etc/profile加到最后面export KUBECONFIG=/etc/kubernetes/admin.conf重启虚拟机:init 6/reboot

再次查看::

[root@kubernetes ~]# kubectl get nodes

K8s单机架构部署

又有了新的报错:
解决:关闭交换分区,等待一会(在自启容器中)

[root@kubernetes ~]# swapoff -a[root@kubernetes ~]# kubectl get nodesNAME  STATUS   ROLES    AGE   VERSIONkubernetes   Ready    control-plane,master   19m   v1.22.2