Minikube搭建Kubernetes集群


Posted in Servers onMarch 31, 2022

Minikube

打开 https://github.com/kubernetes/minikube/releases/tag/v1.19.0 下载最新版本的二进制软件包(deb、rpm包),再使用 apt 或 yum 安装。

或者直接下载 minikube 最新版本二进制文件(推荐)。

curl -Lo minikube https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.19.0/minikube-linux-amd64
# 上面的是阿里云构建的版本,如果使用 google 构建的,需要翻qiang。
#linux版本 curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
#win版本 curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64
chmod +x minikube
sudo mv minikube /usr/local/bin

通过 minikube version 命令可以查看 minikube 的版本,接下来我们使用 minikube start 命令,可以直接创建一个 kubernetes 集群。minikube 会自动下载 kubeadm、kubectl、kubelet。

如果启动不起来,可以创建一个 docker 用户。

useradd -m docker
    passwd docker
    # 修改密码后,加入用户组
    gpasswd -a docker docker

打开 /etc/sudoers 文件,在 root ALL=(ALL:ALL) ALL 下 增加新的一行:

docker ALL=(ALL)ALL

然后切换为 docker 用户:su docker 。

笔者注:如果使用 root 用户启动 minikube 命令,会提示错误,需要使用非 root 用户(一般为docker)。如果你不想切换为别的用户,可以使用 --driver==none

minikube start --driver=none
* Pulling base image ...
* Downloading Kubernetes v1.20.2 preload ...
    > preloaded-images-k8s-v10-v1...: 491.71 MiB / 491.71 MiB  100.00% 60.04 Mi
    > gcr.io/k8s-minikube/kicbase...: 357.67 MiB / 357.67 MiB  100.00% 7.41 MiB
* Creating docker container (CPUs=2, Memory=4000MB) .../

接下来 minikube 会拉取各种镜像,需要一些时间。minikube 完成初始化后,打开新的终端窗口,执行 minikube dashboard 启动面板,根据 URL 地址,可以访问面板。

PS:如果报 X Exiting due to GUEST_MISSING_CONNTRACK: Sorry, Kubernetes 1.20.2 requires conntrack to be installed in root's path,则需要安装 constrack ,apt install constrack

正常的话,执行 docker ps 后是这样的。

Minikube搭建Kubernetes集群

脚本

如果觉得麻烦。。。可以用脚本。。。

新建一个 start.sh,文件内容如下:

echo -n "Starting Kubernetes..."

minikube version
minikube start --wait=false
sleep 2
n=0
until [ $n -ge 10 ]
do
   minikube addons enable dashboard && break
   n=$[$n+1]
   sleep 1
done
sleep 1
n=0
until [ $n -ge 10 ]
do
   kubectl apply -f /opt/kubernetes-dashboard.yaml &>/dev/null  && break
   n=$[$n+1]
   sleep 1
done

echo "Kubernetes Started"

新建一个 kubernetes-dashboard.yaml ,文件内容如下:

apiVersion: v1
kind: Namespace
metadata:
  labels:
    addonmanager.kubernetes.io/mode: Reconcile
    kubernetes.io/minikube-addons: dashboard
  name: kubernetes-dashboard
  selfLink: /api/v1/namespaces/kubernetes-dashboard
spec:
  finalizers:
  - kubernetes
status:
  phase: Active
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: kubernetes-dashboard
  name: kubernetes-dashboard-katacoda
  namespace: kubernetes-dashboard
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 9090
    nodePort: 30000
  selector:
    k8s-app: kubernetes-dashboard
  type: NodePort

把 kubernetes-dashboard.yaml 放到 /opt 目录中。

然后启动 启动 start.sh 即可。

创建 Deployment

Kubernetes Deployment 可以检查 Pod 的健康状况,并在 Pod 中的容器终止的情况下重新启动新的容器。

deployment 可以部署应用并管理实例数量,它提供了一种故障的自我修复机制,当应用挂了后,deployment 可以自动启动一个新的实例,维护固定数量的 pod。

kubectl create 命令创建管理 Pod 的 Deployment。

kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4
# k8s.gcr.io/echoserver:1.4 是镜像名称,hello-node 是 node 名称

k8s.gcr.io/echoserver 镜像暴露了 8080 端口。

查看 Deployment:

kubectl get deployments

查看 pod :

kubectl get pods

查看集群事件:

kubectl get events

查看 kubectl 配置:

kubectl config view

创建 Service

默认情况下,pod 只能在 kubernetes 集群的内部网络访问,如果要外部网络访问,则需要暴露 pod 为 kubnetes service。这里我们把上一小节的 hello-node 节点暴露出去。

kubectl expose deployment hello-node --type=LoadBalancer --port=8080

然后查看刚刚创建的 service:

kubectl get services
NAME         TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
hello-node   LoadBalancer   10.96.194.154   <pending>     8080:31686/TCP   85s
kubernetes   ClusterIP      10.96.0.1       <none>        443/TCP          22m

然后试用 minikube service 提供一个 ip 供外界访问。

minikube service hello-node
root@instance-1:~# minikube service hello-node
|-----------|------------|-------------|-------------------------|
| NAMESPACE |    NAME    | TARGET PORT |           URL           |
|-----------|------------|-------------|-------------------------|
| default   | hello-node |        8080 | http://10.170.0.2:31686 |
|-----------|------------|-------------|-------------------------|
* Opening service default/hello-node in default browser...
  http://10.170.0.2:31686

清理集群资源

首先生成 service、deployment 。

kubectl delete service hello-node
kubectl delete deployment hello-node

然后停止 Minikube 虚拟机(VM):

minikube stop

接着删除 Minikube 虚拟机(VM):

minikube delete

到此这篇关于Minikube搭建Kubernetes集群的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Servers 相关文章推荐
Nginx的反向代理实例详解
Mar 31 Servers
Nginx配置80端口访问8080及项目名地址方法解析
Mar 31 Servers
使用nginx配置访问wgcloud的方法
Jun 26 Servers
nginx中proxy_pass各种用法详解
Nov 07 Servers
解决xampp安装后Apache无法启动
Mar 21 Servers
tomcat正常启动但网页却无法访问的几种解决方法
May 06 Servers
鲲鹏 CentOS 7 安装Python3.7
May 11 Servers
服务器间如何实现文件共享
May 20 Servers
WinServer2012搭建DNS服务器的方法步骤
Jun 10 Servers
openEuler 搭建java开发环境的详细过程
Jun 10 Servers
win sever 2022如何占用操作主机角色
Jun 25 Servers
apache虚拟主机配置的三种方式(小结)
Jul 23 Servers
Apache Pulsar结合Hudi构建Lakehouse方案分析
Apache Hudi的多版本清理服务彻底讲解
Z-Order加速Hudi大规模数据集方案分析
Mar 31 #Servers
深入解析Apache Hudi内核文件标记机制
Apache Hudi数据布局黑科技降低一半查询时间
Apache Hudi集成Spark SQL操作hide表
Nginx工作模式及代理配置的使用细节
You might like
用来给图片加水印的PHP类
2008/04/09 PHP
php通过exif_read_data函数获取图片的exif信息
2015/05/21 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
JavaScript QueryString解析类代码
2010/01/17 Javascript
JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)
2013/10/01 Javascript
JS判断对象是否存在的10种方法总结
2013/12/23 Javascript
JavaScript对象的property属性详解
2014/04/01 Javascript
JavaScript从数组中删除指定值元素的方法
2015/03/18 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
2015/10/29 Javascript
jQuery Easyui datagrid连续发送两次请求问题
2016/12/13 Javascript
Node.js websocket使用socket.io库实现实时聊天室
2017/02/20 Javascript
jQuery EasyUI Accordion可伸缩面板组件使用详解
2017/02/28 Javascript
jQuery自定义多选下拉框效果
2017/06/19 jQuery
vue-router路由懒加载和权限控制详解
2017/12/13 Javascript
如何在Vue中使用CleaveJS格式化你的输入内容
2018/12/14 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
2019/04/26 Javascript
Vue前端项目部署IIS的实现
2020/01/06 Javascript
JavaScript中break、continue和return的用法区别实例分析
2020/03/02 Javascript
Webpack5正式发布,有哪些新特性
2020/10/12 Javascript
[00:35]DOTA2上海特级锦标赛 EG战队宣传片
2016/03/04 DOTA
Python 读取指定文件夹下的所有图像方法
2018/04/27 Python
python yield和Generator函数用法详解
2020/02/10 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
2020/02/15 Python
python中sort sorted reverse reversed函数的区别说明
2020/05/11 Python
Python魔术方法专题
2020/06/19 Python
Python+OpenCV图像处理——实现直线检测
2020/10/23 Python
Python爬虫UA伪装爬取的实例讲解
2021/02/19 Python
html5菜单折纸效果
2014/04/22 HTML / CSS
YesStyle美国/全球:购买亚洲时装、美容化妆品和生活百货
2017/01/16 全球购物
最好的商品表达自己:Cafepress
2019/09/04 全球购物
2014年党支部学习材料
2014/05/19 职场文书
张思德观后感
2015/06/09 职场文书
利用html+css实现菜单栏缓慢下拉效果的示例代码
2021/03/30 HTML / CSS
python自动化操作之动态验证码、滑动验证码的降噪和识别
2021/08/30 Python
Canvas绘制像素风图片的示例代码
2021/09/25 HTML / CSS
Java实现超大Excel文件解析(XSSF,SXSSF,easyExcel)
2022/07/15 Java/Android