Mac M2芯 k8s(minikube)超详细实战 - 单节点部分

news2025/4/12 7:15:30

概述

我使用的电脑是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-arm64

sudo 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-cm

data:
  DATABASE: 'db'
  USER: 'wp'
  PASSWORD: '123'
  ROOT_PASSWORD: '123'
---
apiVersion: v1
kind: Pod
metadata:
  name: maria-pod
  labels:
    app: wordpress
    role: database

spec:
  containers:
  - image: mariadb:10
    name: maria
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 3306

    envFrom:
    - 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   <none>           <none>

准备yml文件 wordpress-pod.yml

apiVersion: v1
kind: ConfigMap
metadata:
  name: wp-cm

data:
  HOST: '172.17.0.6'
  USER: 'wp'
  PASSWORD: '123'
  NAME: 'db'

---
apiVersion: v1
kind: Pod
metadata:
  name: wp-pod
  labels:
    app: wordpress
    role: website

spec:
  containers:
  - image: wordpress:5
    name: wp-pod
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80

    envFrom:
    - 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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/105123.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【强化学习基础】强化学习的基本概念:状态、动作、智能体、策略、奖励、状态转移、轨迹、回报、价值函数

文章目录1.状态&#xff08;State&#xff09;2.动作&#xff08;Action&#xff09;3.智能体&#xff08;Agent&#xff09;4.策略&#xff08;Policy&#xff09;5.奖励&#xff08;Reward&#xff09;6.状态转移&#xff08;State transition&#xff09;7.智能体与环境交互…

高效率的Python开发工具——PyCharm v2022.3正式发布

JetBrains PyCharm是一种Python IDE&#xff0c;其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。此外&#xff0c;该IDE提供了一些高级功能&#xff0c;以用于Django框架下的专业Web开发。 PyCharm v2022.3官方正式版下载(q技术交流&#xff1a;786598704)…

wireshark抓包数据提取TCP/UDP/RTP负载数据方法

wireshark抓包数据提取TCP_UDP_RTP负载数据方法 文章目录wireshark抓包数据提取TCP_UDP_RTP负载数据方法1 背景2 TCP和UDP负载提取方式3 RTP负载提取方式1 背景 在视频抓包分析过程中&#xff0c;有时候需要从TCP、UDP、RTP中直接提取payload数据&#xff0c;比如较老的摄像机…

微课堂助力在线教育招生引流方式_付费视频系统搭建对在线教育的作用

一、借助优惠码线上线下推广课程 1、线下发传单&#xff1a; 机构先在我们后台创建对应课程的通用优惠码&#xff0c;然后再制作课程传单介绍页。传单上显示出对应课程的通用优惠码&#xff0c;线下派发传单给到用户。 2、线下刮刮卡片推广&#xff1a;将私有码制作成卡片配合…

SVM(二)对偶问题转化以及求解

上篇&#xff1a; SVM&#xff08;支持向量机&#xff09;&#xff08;一&#xff09;基本形式推导 凸优化 考虑如下优化问题&#xff1a; 应用拉格朗日乘子法&#xff1a; 定义拉格朗日对偶函数G\mathcal{G}G&#xff0c;这里 infinfinf 是上确界&#xff08;集合的最小上…

超标量处理器设计——第十章_提交

参考《超标量处理器》姚永斌著 文章目录超标量处理器设计——第十章_提交10.1 概述10.2 重排序缓存10.2.1 一般结构10.2.2 端口需求10.3 管理处理器的状态10.3.1 使用ROB管理指令集定义的状态10.3.2 使用物理寄存器管理指令集定义的状态10.4 特殊情况处理10.4.1 分支预测失败的…

【微服务】Nacos ⼀致性协议

目录 一、为什么 Nacos 需要⼀致性协议 二、为什么 Nacos 选择了 Raft 以及 Distro 1、从服务注册发现来看 2、从配置管理来看 3、为什么是 Raft 和 Distro 呢 三、早期的 Nacos ⼀致性协议 四、当前 Nacos 的⼀致性协议层 &#x1f496; Spring家族及微服务系列文章 …

【关于时间序列的ML】项目 2 :使用机器学习预测股票价格

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

5G无线技术基础自学系列 | RF优化流程

素材来源&#xff1a;《5G无线网络规划与优化》 一边学习一边整理内容&#xff0c;并与大家分享&#xff0c;侵权即删&#xff0c;谢谢支持&#xff01; 附上汇总贴&#xff1a;5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 在介绍完了RF优化的思路和措施之后&…

【Linux 软件包管理器 yum】

While there is life there is hope. 目录 1 什么是软件包 2 关于 rzsz 3 注意事项 4 查看软件包 5 如何安装软件 6 如何卸载软件 总结 1 什么是软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序. 但是这样太麻烦了, 于是有些人…

[译] 来了解一下 Island Architecture 孤岛架构

建立一个网站有不同的方法&#xff0c;其中之一便是多页应用程序(MPA)&#xff0c;它大约在十年前就过时了&#xff0c;现在又重新流行起来。MPA已经被Angular和React以及其他现代框架所普及的单页应用(SPA)方法所取代。 由于应用软件迭代趋势的运作方式&#xff0c;方法/工具…

异步任务如何测试?

总是能收到这样的问题&#xff1a; 异步任务如何测试&#xff1f;异步的接口如何测试&#xff1f;可以通过自动化来保证异步任务是否执行了吗&#xff1f;能否保证执行是否成功&#xff1f; 收到这样的问题&#xff0c;其实大家的问题都是通用的&#xff0c;那么正好整理下我…

毫无基础的人如何入门 Python ?

Python 我也是从零开始自学的&#xff0c;因为工作的原因&#xff0c;我需要 python 做很多数据抓取的工作。我把自己的学习的感想&#xff0c;做了一下总结&#xff0c;阅读到最后&#xff0c;一定会有惊喜。 首选&#xff0c;我不会一下子&#xff0c;给你推荐一堆视频课程&…

从git上新拉下来的vue项目,没有node_modules依赖,npm install报错,node-sass报错

因为没有node_modules依赖&#xff0c;我直接 1.npm install&#xff0c;但是报错&#xff1a; 2.npm install --force报错 3.npm audit fix --force报错 4.npm install --legacy-peer-deps报错 5.npm install --registry https://registry.npm.taobao.org 直接安装淘宝镜像也…

一名智能驾驶产品经理的自我修养

已剪辑自: https://mp.weixin.qq.com/s/fCSO7hmP3FP-Xat-NyFG0A 随着智能驾驶浪潮的兴起&#xff0c;市场上产生了对相关人才的大量需求&#xff0c;也诞生了一些传统汽车行业所没有的新兴岗位。其中&#xff0c;智驾产品经理&#xff0c;作为一个典型的、互联网与汽车行业深度…

应用反演工程对四层减反膜进行分析

有很多的过程可以被称之为反演工程&#xff0c;但在Essential Macleod中&#xff0c;该术语的意思是用来识别理想设计的和实际生产尝试之间的差异。该功能大致可以概括为“出了什么问题”。这一过程类似于优化&#xff0c;在优化过程中&#xff0c;将初始设计进行优化&#xff…

软饭硬吃,因为“测试能力单一”面试多次被拒,给跳槽的各位测试人员提个醒

最近公司有几位同事打算离职出去看看其他机会&#xff0c;几轮面试下来感觉很好&#xff0c;最终却没有收到几家offer。这几位同事都有好几年工作经验&#xff0c;测试经验丰富&#xff0c;也参与过大型项目的测试&#xff0c;在测试用例设计、测试流程把控、测试执行等方面做得…

汇富纳米冲刺创业板:拟募资6.25亿 王跃林堂叔侄控制近50%股权

雷递网 雷建平 12月20日湖北汇富纳米材料股份有限公司&#xff08;简称&#xff1a;“汇富纳米”&#xff09;日前递交招股书&#xff0c;准备在深交所创业板上市。汇富纳米计划募资6.25亿元&#xff0c;其中&#xff0c;3.5亿元用于2万吨/年气相法纳米粉体材料项目&#xff0c…

[前端攻坚]:如何优雅的用function实现一个class

使用function来写出一个class的类对于我们来说当然是简单的&#xff0c;但必须注意的是&#xff0c;要做好function实现一个class&#xff0c;那么就要必须实现达到高精准度的模仿&#xff0c;把该实现的细节都实现好&#xff0c;才能更好的对class进行深入的理解 废话少说&…

js逆向-无限debugger的原理与绕过

js逆向-无限debugger的原理与绕过 debugger是JavaScript中定义的一个专门用于断点调试的关键字,只要遇到他,JavaScritp的执行便会在此处中断,进入调试模式。 有了debugger这个关键字,我们就可以非常方便地对JavaScript代码进行调试,比如使用JavaScript Hook时,我们可以…