Mac M2芯 k8s(minikube)超详细实战 - 单节点部分
创始人
2024-04-27 18:50:58
0

概述

我使用的电脑是Mac pro M2芯的,使用的虚拟环境是 Ubuntu 22.04 ,M2芯兼容性不是特别好,所以尽量跟我博客中的版本保持一致。

  • 虚拟机环境 Ubuntu 22.04
  • docker :20.10.17
  • minikube:v1.25.2

搭建minikube虚拟机环境

虚拟机初始化

sudo apt update
sudo apt install -y git vim curl jq openssh-server

ip addr 查看ip,可以使用终端登录虚拟机

Apple arm64

下载时请注意版本,以宿主机的版本为准,下载对应的版本,不然会报bash: /usr/local/bin/kubectl:无法执行二进制文件: 可执行文件格式错误的错误提示。

curl -Lo minikube https://github.com/kubernetes/minikube/releases/download/v1.25.2/minikube-linux-arm64sudo install minikube /usr/local/bin/

使用minikube version查看版本:

minikube version: v1.25.2
commit: 362d5fdc0a3dbee389b3d3f1034e8023e72bd3a7

使用minikube kubectl命令来安装kubectl:

在这之前需要安装docker,使用命令sudo snap install docker,把当前用户加入到docker组,命令如下:

sudo docker version --format {{.Server.Os}}-{{.Server.Version}}
sudo groupadd docker
sudo usermod -aG docker $USER && newgrp docker

虚拟机安装完成后,重启一下虚拟机,不然会报Exiting due to DRV_NOT_HEALTHY:意思是没找到容器的驱动器,有时间这个问题的原因是docker没有启动。

启动:

minikube start --image-mirror-country='cn' --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers'

启动完成后可以使用这两个命令查看集群状态:

minikube status
minikube node list

查看kubectl版本,minikube kubectl -- version

使用 Linux 的“alias”功能,为它创建一个别名,写到当前用户目录下的 .bashrc 里,也就是这样:

alias kubectl="minikube kubectl --"

执行kubectl run ngx --image=nginx:alpine,这里涉及 Kubernetes 里的一个非常重要的概念:Pod。

命令执行之后kubectl get pod可以看到,在 Kubernetes 集群里就有了一个名字叫 ngx 的 Pod 正在运行,表示我们的这个单节点 minikube 环境已经搭建成功。

在这里插入图片描述

Kubernetes 的基本架构

在这里插入图片描述

你可以使用命令kubectl get node来查看 Kubernetes 的节点状态:

Master 里的组件有哪些:

Master 里有 4 个组件,分别是 apiserver、etcd、scheduler、controller-manager。

在这里插入图片描述

这 4 个组件也都被容器化了,运行在集群的 Pod 里,我们可以用 kubectl 来查看它们的状态,使用命令:

kubectl get pod -n kube-system

插件

查看插件的命令minikube addons list

比较重要的有两个:DNS 和 Dashboard。

在 minikube 环境里执行一条简单的命令,就可以自动用浏览器打开 Dashboard 页面,而且还支持中文 minikube dashboard

如果想设置外网可以访问,执行命令kubectl proxy --port=8001 --address='192.168.88.131' --accept-hosts='^.*' &

k8s nginx + WordPress + mariadb 实战

先从搭建一个简单的WordPress网站开始,在这之前你先了解一下yaml语言,因为k8s需要的通信都是建立在yaml语言之上,和web中的html一样,是所有运行的基础。

基础知识

编写yaml文档有两个小技巧,一个是参考Kubernetes 的官方参考文档,https://kubernetes.io/docs/reference/kubernetes-api/。

第二个是使用kubectl命令:

kubectl explain pod
kubectl explain pod.metadata
kubectl explain pod.spec
kubectl explain pod.spec.containers

使用kubectl例如写入一个模版,输出到一个指定文件中:

kubectl run ngx --image=nginx:alpine --dry-run=client -o yaml > nginx_pod.yaml

pod的关键在于yaml文件的编写,然后用kubectl去执行:

# 添加pod
kubectl apply -f nginx_pod.yaml
# 删除pod
kubectl delete pod [podname]
# 查看pod节点
kubectl get pod -o wide
# 查看日志
kubectl logs [podname]
# 查看pod详细情况
kubectl describe pod [podname]
# 登陆pod 
kubectl exec -it ngx-pod -- bash

实战部分

先看看下图,这是我们要完成的事情,也是k8s的原理所在。

在这里插入图片描述

1:部署MariaDB,准备yml文件 maria.yml

apiVersion: v1
kind: ConfigMap
metadata:name: maria-cmdata:DATABASE: 'db'USER: 'wp'PASSWORD: '123'ROOT_PASSWORD: '123'
---
apiVersion: v1
kind: Pod
metadata:name: maria-podlabels:app: wordpressrole: databasespec:containers:- image: mariadb:10name: mariaimagePullPolicy: IfNotPresentports:- containerPort: 3306envFrom:- prefix: 'MARIADB_'configMapRef:name: maria-cm

执行命令kubectl apply -y maria.yml

2.部署WordPress的Pod

执行 kubectl get pod -o wide命令,查看maria-pod的IP地址和运行状态,我本地的是172.17.0.6,状态是Running,表示ok。

node3@node3-virtual-machine:~/yaml$ kubectl get pod -o wide
NAME        READY   STATUS    RESTARTS   AGE   IP           NODE       NOMINATED NODE   READINESS GATES
maria-pod   1/1     Running   0          96m   172.17.0.6   minikube              

准备yml文件 wordpress-pod.yml

apiVersion: v1
kind: ConfigMap
metadata:name: wp-cmdata:HOST: '172.17.0.6'USER: 'wp'PASSWORD: '123'NAME: 'db'---
apiVersion: v1
kind: Pod
metadata:name: wp-podlabels:app: wordpressrole: websitespec:containers:- image: wordpress:5name: wp-podimagePullPolicy: IfNotPresentports:- containerPort: 80envFrom:- prefix: 'WORDPRESS_DB_'configMapRef:name: wp-cm

执行部署命令,kubectl apply -f wordpress-pod.yml

3.WordPress Pod 映射端口号,让它在集群外可见

因为 Pod 都是运行在 Kubernetes 内部的私有网段里的,外界无法直接访问,想要对外暴露服务,需要使用一个专门的 kubectl port-forward 命令,它专门负责把本机的端口映射到在目标对象的端口号,经常用于 Kubernetes 的临时调试和测试。

kubectl port-forward wp-pod 8080:80 &

如果想关闭端口转发,需要敲命令 fg ,它会把后台的任务带回到前台,然后就可以简单地用“Ctrl + C”来停止转发了。

在这里插入图片描述

4.创建反向代理的 Nginx

nginx的配置文件,准备proxy.conf,我本地的路径/home/node3/conf/proxy.conf

server {listen 80;default_type text/html;location / {proxy_http_version 1.1;proxy_set_header Host $host;proxy_pass http://127.0.0.1:8080;}
}

执行docker命令,我本机虚拟机的ip是192.168.88.131 :

docker run -d --rm \--net=host \-v /home/node3/conf/proxy.conf:/etc/nginx/conf.d/default.conf \nginx:alpine

在这里插入图片描述

相关内容

热门资讯

安卓双系统添加应用,轻松实现多... 你有没有想过,你的安卓手机里可以同时运行两个系统呢?听起来是不是很酷?想象一边是熟悉的安卓系统,一边...
pipo安卓进系统慢,探究pi... 最近是不是发现你的Pipo安卓系统更新或者运行起来特别慢?别急,今天就来给你好好分析分析这个问题,让...
怎样使用安卓手机系统,安卓手机... 你有没有发现,安卓手机已经成为我们生活中不可或缺的一部分呢?从早晨闹钟响起,到晚上睡前刷剧,安卓手机...
双系统安卓安装caj,轻松实现... 你有没有想过,你的安卓手机里装上双系统,是不是就能同时享受安卓和Windows系统的乐趣呢?没错,这...
安卓使用ios系统教程,安卓用... 你是不是也和我一样,对安卓手机上的iOS系统充满了好奇?想要体验一下苹果的优雅和流畅?别急,今天我就...
安卓系统gps快速定位,畅享便... 你有没有遇到过这样的情况:手机里装了各种地图导航软件,但每次出门前都要等上好几分钟才能定位成功,急得...
安卓手机系统更新原理,原理与流... 你有没有发现,你的安卓手机最近是不是总在提醒你更新系统呢?别急,别急,让我来给你揭秘一下安卓手机系统...
安卓系统通知管理,全面解析与优... 你有没有发现,手机里的通知就像是一群调皮的小精灵,时不时地跳出来和你互动?没错,说的就是安卓系统的通...
安卓系统手机哪买,揭秘哪里购买... 你有没有想过,拥有一部安卓系统手机是多么酷的事情呢?想象你可以自由安装各种应用,不受限制地探索各种功...
安卓系统 ipv4,基于安卓系... 你知道吗?在智能手机的世界里,有一个系统可是无人不知、无人不晓,那就是安卓系统。而在这个庞大的安卓家...
目前安卓是什么系统,探索安卓系... 亲爱的读者,你是否曾好奇过,如今安卓系统究竟是什么模样?在这个科技飞速发展的时代,操作系统如同人体的...
安卓6.0系统比5.0,从5.... 你有没有发现,自从手机更新了安卓6.0系统,感觉整个人都清爽了不少呢?没错,今天咱们就来聊聊这个话题...
安卓2.36系统升级,功能革新... 你知道吗?最近安卓系统又来了一次大变身,那就是安卓2.36系统升级!这可不是一个小打小闹的更新,而是...
安卓系统源码怎么打开,并可能需... 你有没有想过,安卓系统的源码就像是一扇神秘的门,隐藏着无数的技术秘密?想要打开这扇门,你得掌握一些小...
安卓8.0系统体验视频,智能革... 你有没有听说安卓8.0系统最近可是火得一塌糊涂啊!作为一个紧跟科技潮流的数码达人,我当然要来给你好好...
宣传系统漫画app安卓,探索安... 亲爱的读者们,你是否曾在某个午后,百无聊赖地打开手机,想要寻找一些轻松愉悦的读物?今天,我要给你介绍...
鸿蒙替换安卓系统吗,开启智能生... 你知道吗?最近科技圈里可是炸开了锅,因为华为的新操作系统鸿蒙系统,据说要大举进军手机市场,替换掉安卓...
手机安卓系统深度清理,解锁手机... 手机里的东西是不是越来越多,感觉就像一个装满了杂物的储物柜?别急,今天就来教你一招——手机安卓系统深...
安卓上的windows系统,融... 你有没有想过,在安卓手机上也能体验到Windows系统的魅力呢?没错,这就是今天我要跟你分享的神奇故...
安卓系统焦点变化事件,Andr... 你知道吗?在安卓系统的世界里,最近发生了一件超级有趣的事情——焦点变化事件。这可不是什么小打小闹,它...