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配置https实现域名访问项目(图文教程)
Mar 31 Servers
详解Nginx启动失败的几种错误处理
Apr 01 Servers
关于Nginx中虚拟主机的一些冷门知识小结
Mar 03 Servers
Shell脚本一键安装Nginx服务自定义Nginx版本
Mar 20 Servers
Z-Order加速Hudi大规模数据集方案分析
Mar 31 Servers
Windows Server 2016 配置 IIS 的详细步骤
Apr 28 Servers
nginx lua 操作 mysql
May 15 Servers
netty 实现tomcat的示例代码
Jun 05 Servers
vscode内网访问服务器的方法
Jun 28 Servers
nginx之queue的具体使用
Jun 28 Servers
Flink 侧流输出源码示例解析
Sep 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会员权限控制实现原理分析
2011/05/29 PHP
PHP5.5在windows安装使用memcached服务端的方法
2014/04/16 PHP
PHP实现伪静态方法汇总
2016/01/13 PHP
JSON字符串传到后台PHP处理问题的解决方法
2016/06/05 PHP
PHP构造函数与析构函数用法示例
2016/09/28 PHP
PHP程序员简单的开展服务治理架构操作详解(二)
2020/05/14 PHP
extJs 文本框后面加上说明文字+下拉列表选中值后触发事件
2009/11/27 Javascript
LazyLoad 延迟加载(按需加载)
2010/05/31 Javascript
JavaScript中的View-Model使用介绍
2011/08/11 Javascript
提取jquery的ready()方法单独使用示例
2014/03/25 Javascript
Firefox下无法正常显示年份的解决方法
2014/09/04 Javascript
jquery通过load获取文件的内容并跳到锚点的方法
2015/01/29 Javascript
js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码
2016/05/13 Javascript
BootStrapTable服务器分页实例解析
2016/12/20 Javascript
JS中Array数组学习总结
2017/01/18 Javascript
基于Vue实现tab栏切换内容不断实时刷新数据功能
2017/04/13 Javascript
JS module的导出和导入的实现代码
2019/02/25 Javascript
如何在wxml中直接写js代码(wxs)
2019/11/14 Javascript
在elementui中Notification组件添加点击事件实例
2020/11/11 Javascript
Python中列表(list)操作方法汇总
2014/08/18 Python
在Python的循环体中使用else语句的方法
2015/03/30 Python
python如何实现远程控制电脑(结合微信)
2015/12/21 Python
实例解析Python的Twisted框架中Deferred对象的用法
2016/05/25 Python
python pandas时序处理相关功能详解
2019/07/03 Python
python3利用Axes3D库画3D模型图
2020/03/25 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
2020/07/20 Python
python 爬虫如何实现百度翻译
2020/11/16 Python
在css3中background-clip属性与background-origin属性的用法介绍
2012/11/13 HTML / CSS
Qoo10马来西亚:全球时尚和引领潮流的购物市场
2016/08/25 全球购物
德国黑胶唱片、街头服装及运动鞋网上商店:HHV
2018/08/24 全球购物
第二层交换机和路由器的区别?第三层交换机和路由器的区别?
2013/05/23 面试题
化学教师教学反思
2014/01/17 职场文书
单位作风建设剖析材料
2014/10/11 职场文书
师德师风主题教育活动总结
2015/05/07 职场文书
浪漫的婚礼主持词
2015/06/30 职场文书
Python使用mitmproxy工具监控手机 下载手机小视频
2022/04/18 Python