minikube搭建K8S集群

1、部署环境

  • 华为云ECS

  • 操作系统: Linux CentOS 7.9 64位

  • CPU & 内存:2核(vCPU) 4 GiB

  • 硬盘:需要20G

  • 网络:需要网络,要下载、访问

  • 容器:需要先安装Docker, Docker 版本:24.0.4

  • Kubernetes 版本:1.23.8

2.安装docker并启动

(1)移除以前docker相关包

arduino 复制代码
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

(2)配置yum源

arduino 复制代码
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

(3)安装docker

lua 复制代码
sudo yum install -y docker-ce docker-ce-cli containerd.io

也可以指定某个版本进行安装,例如:

bash 复制代码
# 这只是个例子
yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7  containerd.io-1.4.6

(4)启动

bash 复制代码
systemctl enable docker --now

(5)配置加速

这里额外添加了docker的生产环境核心配置cgroup

bash 复制代码
sudo mkdir -p /etc/docker 
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://lkb2w75n.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

其中,registry-mirrors 可以换成自己的加速地址

3.安装Minikube

(1)下载并安装 Minikube

bash 复制代码
sudo curl -LO https://storage.googleapis.com/minikube/releases/v1.29.0/minikube-linux-amd64 && sudo install minikube-linux-amd64 /usr/local/bin/minikube

(2)查看 Minikube版本

复制代码
minikube version

4.启动 Minikube

(1)启动集群

ini 复制代码
minikube start --image-mirror-country='cn' --kubernetes-version=v1.23.8

发现报错了,意思是不能用root用户运行这个命令。

我们直接加上 --force,强制执行

css 复制代码
 minikube start --force --image-mirror-country='cn' --kubernetes-version=v1.23.8

命令参数:

ini 复制代码
 --image-mirror-country:cn 指定为国内镜像源;
 --cpus=2: 为 minikube 虚拟机分配 CPU 核数;
 --memory=2000mb: 为 minikube 虚拟机分配内存数;
 --kubernetes-version=***: 指定部署的kubernetes版本;
 --driver=docker:指定驱动,默认是 docker;

(2)验证

lua 复制代码
minikube status

查看版本

复制代码
minikube kubectl version

服务端版本和客户端版本都正常展示了!

查看 minikube 容器 (Docker)

复制代码
docker ps

查看运行的全部pod

arduino 复制代码
minikube kubectl -- get pods -A

5.安装 kubectl

由于 minikube 内置的 kubectl 命令功能不全,所以最好独立安装一个 kubectl

用以下命令下载最新发行版:

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

安装 kubectl:

bash 复制代码
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

查看版本的详细信息:

css 复制代码
kubectl version --client --output=yaml

6.启动 dashboard

1.启动并显示代理地址

css 复制代码
minikube dashboard --url

这个 URL 只能在宿主机内部访问,在宿主机之外无法直接访问,需要设置 kubectl proxy 代理或其它方式

2.设置 kubectl proxy 代理

ini 复制代码
minikube kubectl -- proxy --address='0.0.0.0'  --accept-hosts='^*$' &

需要修改 ECS 防火墙规则,允许入方向的 8001 端口通行。

在宿主机之外浏览器访问:

ruby 复制代码
http://ECS公网IP:8001/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/

3.查看 dashboard 状态

arduino 复制代码
kubectl get svc -n kubernetes-dashboard

或者查看全部的pod

arduino 复制代码
kubectl get pod -A

2个kubernetes-dashboard 都是Running状态。

7.部署一个应用

部署一个nginx,并通过IP外网访问

(1)创建deployment

ini 复制代码
kubectl create deployment test-nginx --image=nginx:1.7.9

(2)查看

arduino 复制代码
kubectl get pod,deploy

发现pod和deployment都已经部署成功了

(3)暴漏service端口

css 复制代码
kubectl expose deploy test-nginx --port=80 --type=NodePort

查看service

arduino 复制代码
kubectl get svc

如果是kubernetes集群,直接访问 集群中的任意一个IP:80 即可访问,但是我们安装的是 minikube,所以不能用这个方式,需要对80端口转发

(4)转发端⼝

bash 复制代码
 kubectl port-forward --address 0.0.0.0 service/test-nginx 8080:80 &

为了方便区分,将创建的service(test-nginx)80端口转发到8080

访问 http://ECS公网IP:8080/

部署了一个应用后,我们回过头来看dashboard

看到我们用命令部署的nginx相关的pod、deployment、service都展现出来的。

欢迎关注我的公众号,第一时间接收最新文章~ 搜索公众号: 码咖 或者 扫描下方二维码:

相关推荐
Cyeam27 分钟前
爆火的 OpenClaw,赢在生态创新
程序员·开源·openai
吴声子夜歌1 小时前
TypeScript——基础类型(三)
java·linux·typescript
GetcharZp1 小时前
Git 命令行太痛苦?这款 75k Star 的神级工具,让你告别“合并冲突”恐惧症!
后端
Victor3562 小时前
MongoDB(69)如何进行增量备份?
后端
Victor3562 小时前
MongoDB(70)如何使用副本集进行备份?
后端
databook2 小时前
别让AI代码,变成明天的技术债
人工智能·程序员·ai编程
DynamicsAgg2 小时前
企业数字化底座-k8s企业实践系列第二篇pod创建调度
java·容器·kubernetes
千寻girling3 小时前
面试官 : “ 说一下 Python 中的常用的 字符串和数组 的 方法有哪些 ? ”
人工智能·后端·python
森林里的程序猿猿3 小时前
并发设计模式
java·开发语言·jvm