Minikube部署k8s集群

747 阅读2分钟

一、先安装docker

可参考linux下安装docker

二、安装kubectl

1.在根目录下,下载kubectl

#进入根目录
cd ~

下载地址可参考官方介绍

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

2.使文件可执行

#下载完成会在根目录下多一个kubectl文件,执行下列命令让文件可执行
chmod +x ./kubectl

3.移动到系统目录

`mv ./kubectl /usr/local/bin/kubectl`

4.查看kubectl的版本

kubectl version

image.png

三、安装minikube

1.下载minikube

minikube官方安装教程

image.png

# 在根目录~下全复制如下命令执行,执行完会在/usr/local/bin/下生成一个minikube文件
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

通过minikube version命令可以查看 minikube 的版本。

image.png

2.启动minikube

直接执行 minikube start 命令即可进行部署,但是国内会被墙,可能拉取不了镜像,需要设置代理。

# image-mirror-country指定国内源
minikube start --image-mirror-country=cn

问题1:

image.png

执行如下命令

minikube start --image-mirror-country=cn --driver=none

问题2:

image.png

需要安装 conntrack

yum install conntrack

再次执行

minikube start --image-mirror-country=cn --driver=none

问题3:

image.png

从K8S 1.24开始,dockershim已经从kubelet中移除,但因为历史问题Docker却不支持K8S主推的CRI(容器运行时接口)标准,所以Docker不能再作为K8S的容器运行时了,即从K8S 1.24开始不再使用Docker了。但是如果想继续使用Docker的话,可以在kubelet和Docker之间加上一个中间层cri-docker。 需要安装cri-dockerd

项目地址:https://github.com/Mirantis/cri-dockerd

image.png

#解压
tar -xvf cri-dockerd-0.2.3.amd64.tgz
#拷贝到目录
cp cri-dockerd/cri-dockerd /usr/local/bin/
#授权
chmod +x /usr/local/bin/cri-dockerd
#确认已安装版本
cri-dockerd --version

配置启动文件

  • 创建cri-docker.service配置文件
vi /lib/systemd/system/cri-docker.service

内容:

[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket

[Service]
Type=notify
ExecStart=/usr/local/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.7
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always

StartLimitBurst=3

StartLimitInterval=60s

LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity

TasksMax=infinity
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target
  • 创建cri-docker.socket配置文件
vi /lib/systemd/system/cri-docker.socket

内容:

[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service

[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker

[Install]
WantedBy=sockets.target
  • 启动cri-docker
systemctl daemon-reload

systemctl start docker.service

systemctl enable cri-docker

systemctl status docker.service

再次执行

minikube start --image-mirror-country=cn --driver=none

问题4

image.png

需要安装crictl,我们可以参考官方安装步骤:crictl官网安装步骤

image.png

VERSION="v1.25.0"
wget https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-$VERSION-linux-amd64.tar.gz
sudo tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/bin
rm -f crictl-$VERSION-linux-amd64.tar.gz

再次执行启动minikube

minikube start --image-mirror-country=cn --driver=none

如果还报问题4错误,sudo crictl version找不到命令

cp /usr/local/bin/crictl /usr/bin/crictl

再次执行启动minikube

minikube start --image-mirror-country=cn --driver=none

会下载东西,如果网络不好,会下载失败,重复执行几遍,应该可以下载成功

3.测试minikube

minikube status

image.png

获取集群所有节点(机器)

kubectl get nodes

获取集群所有命名空间

kubectl get namespaces

查看集群所有 Pod

kubectl get pods -A

image.png

问题:节点status显示NotReady

image.png

解决步骤:

1.查看节点详细信息

kubectl describe nodes 节点名

image.png

之前显示kubeletNotReady,需要安装kubelet。

2.安装 kubeadm、kubelet 和 kubectl

kubeadm:用来初始化集群的指令。

kubelet:在集群中的每个节点上用来启动 Pod 和容器等。

kubectl:用来与集群通信的命令行工具。

修改镜像源

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
#kubernetes的镜像在国外,速度比较慢,这里切换成国内的镜像源
#baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
#gpgkey=https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
        http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF

开始进行安装

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

重启服务

systemctl enable --now kubelet

配置 kubelet 的 cgroup 驱动

vim /etc/sysconfig/kubelet, 添加下面的配置
 
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
 

查看节点状态

kubectl get nodes

image.png

四、启动minikube dashboard

minikube dashboard

image.png

这里启动的地址只能本机访问,可以理解为minikube虚拟机代理到宿主机上,并没有提供外网访问的途径

# 使用kubectl提供代理,需要另开一个终端执行此命令
kubectl proxy --address='0.0.0.0'  --accept-hosts='^*$' --port=8009

image.png

执行完毕后即可通过

http://宿主机ip:8009/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/

image.png

五、管理集群

#暂停k8s不影响部署的应用
minikube pause

#取消暂停
minikube unpause

#停止 Minikube 虚拟机
minikube stop

#删除 Minikube 虚拟机
minikube delete