minikube搭建k8s

2023-09-21 11:03:45

环境:centos7,docker18

minikube搭建k8s

说明

minikube是最接近原生kubernetes的本地单机版集群,支持大部分kubernetes功能,用于学习和开发k8s。支持Linux、Windows、Mac
官网安装文档

安装前提

  • 一台物理机或者虚拟机,物理机CPU大于2核vcpu、2G内存、20G磁盘,此处以CentOS7.9.2009为例
  • 可连接网络
  • 包括一个容器或者虚拟机管理引擎,此处以Docker为例
  • 此处以Linux服务器为例,如CentOS7.9.2003

安装步骤

前置操作(可选)

为了减少部署minikube时可能遇到的一些问题,建议以安装原生kubernets的一些操作系统设置为准,当前未验证不执行以下步骤的可能造成的影响,我会给出执行步骤的意见,请自行取舍。

升级内核(推荐)

原因:使用Containerd建议使用内核4.x以上,否则会有内核版本控制的告警

  • 检查当前内核版本,如果低于4.x建议升级
    awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
  • 添加elrepo源
    rpm -Uvh https://mirrors.aliyun.com/elrepo/elrepo/el7/x86_64/RPMS/elrepo-release-7.0-5.el7.elrepo.noarch.rpm
  • 检查有哪些可以的版本(可选,可以直接执行下一步安装最新)
    yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
  • 安装内核
    # 安装最新稳定版
    yum --enablerepo=elrepo-kernel install kernel-lt -y
    # 安装指定版本
    yum --enablerepo=elrepo-kernel install kernel-lt-5.4.180-1.el7.elrepo -y
  • 生成 grub 配置文件
    grub2-mkconfig -o /boot/grub2/grub.cfg
  • 再次查看可用内核版本,并更改启动顺序
    # 更改启动顺序,此处0为最新安装的内核的序号
    grub2-set-default 0
  • 重启并检查当前生效内核版本
    #重启
    reboot
    #检查生效的内核
    uname -r
升级docker

原因:较新版本的kubernetes需要的版本较高,当前minikube官方建议是18.09及以上

  • 查看当前docker版本,低于18.09则继续升级docker version
  • 卸载当前安装的docker
    yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate
  • docker-engine安装 yum-utils 包 ,设置存储库yum install -y yum-utils
    yum-config-manager \
    --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    yum update -y
  • 安装特定版本的docker(可选)
    # 查看当前可用docker版本
    yum list docker-ce --showduplicates | sort -r
    # 安装指定版本
    yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-compose-plugin
    # 安装最新版本(推荐)
    yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
  • 启动docker并设置自动启动
    systemctl enable docker
    systemctl start docker
禁用SELinux

原因: 当前kubelet不支持SElinux模式。必须关闭以允许容器访问主机文件系统、使Pod网络正常工作
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

关闭防火墙(可选)

systemctl stop firewalld

禁用swap分区

原因:原生 kubernetes不禁用swap分区会对性能有较大影响,此处继承
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab

时间同步(可选)

注1:可以使用ntp或者chronyd,且两者不能同时使用,此处使用chronyd为例
注2:chronyd默认同步pool.ntp.org 项目中的公共服务器,也可同步其他服务器,如阿里ntp服务器
yum -y install chrony
systemctl start chronyd
systemctl enable --now chronyd
# 与公共服务器同步时间
chronyc sources

卸载 networkmanager(可选)

systemctl stop NetworkManager
yum remove NetworkManager -y

安装minikube

  • 获取minikube
  • 启动(基本命令)
    minikube start
  • 建议的启动命令
    minikube start --force --driver=docker --cni calico --image-mirror-country='cn' --container-runtime=containerd

注1:安装1.24.1版本及以上,因为kubernetes弃用了dockershim,改用containerd作为CRI,因此必须指定–container-runtime=containerd,否则kubelet无法正常启动,这个也是高版本无法正常minikube start,但是指定低于1.24.1版本就可以启动的原因
注2:–image-mirror-country='cn’是使用国内阿里云仓库代替国外谷歌仓库,解决网络慢、不通的问题,实际使用时(2023.3 2)发现谷歌仓库访问正常,阿里云仓库安装最新kubernetes版本时缺少部分镜像,所以能不加此参数时就不加
注3:如果–image-mirror-country='cn’还是拉不动镜像,比如cni指定calico网络时,无法拉取对应镜像,则建议将–image-mirror-country='cn’替换为 --registry-mirror=https://registry.docker-cn.com,当前测试可行

配置dashboard为固定service,使用proxy代理到宿主机器

dashboard配置yaml

vi  kubernetes-dashboard-nodeport-svc.yaml 

配置文件为下面的内容

apiVersion: v1
kind: Service
metadata:
  name: kubernetes-dashboard-nodeport-svc
  namespace: kubernetes-dashboard
  labels:
    addonmanager.kubernetes.io/mode: Reconcile
    k8s-app: kubernetes-dashboard
    kubernetes.io/minikube-addons: dashboard
spec:
  selector:
    k8s-app: kubernetes-dashboard
  type: NodePort
  ports:
    - protocol: TCP
      port: 9090
      targetPort: 9090
      nodePort: 30000

启动dashboard的service并开启代理,测试通过宿主机ip访问dashboard

#创建dashboard的service
kubectl apply -f kubernetes-dashboard-nodeport-svc.yaml 
#启动代理服务
#kubectl expose deployment kubernetes-dashboard/kubernetes-dashboard-nodeport-svc --type=LoadBalancer --port=30000
kubectl proxy --address='0.0.0.0'  --accept-hosts='^*$' --port=30000 &

打开宿主机ip对应的地址:
http://172.168.12.128:30000/api/v1/namespaces/kubernetes-dashboard/services/kubernetes-dashboard-nodeport-svc/proxy
kubernetes-dashboard/kubernetes-dashboard-nodeport-svc
显示下面的页面即为dashboard页面

minikube搭建k8s

说明

minikube是最接近原生kubernetes的本地单机版集群,支持大部分kubernetes功能,用于学习和开发k8s。支持Linux、Windows、Mac
官网安装文档

安装前提

  • 一台物理机或者虚拟机,物理机CPU大于2核vcpu、2G内存、20G磁盘,此处以CentOS7.9.2009为例
  • 可连接网络
  • 包括一个容器或者虚拟机管理引擎,此处以Docker为例
  • 此处以Linux服务器为例,如CentOS7.9.2003

安装步骤

前置操作(可选)

为了减少部署minikube时可能遇到的一些问题,建议以安装原生kubernets的一些操作系统设置为准,当前未验证不执行以下步骤的可能造成的影响,我会给出执行步骤的意见,请自行取舍。

升级内核(推荐)

原因:使用Containerd建议使用内核4.x以上,否则会有内核版本控制的告警

  • 检查当前内核版本,如果低于4.x建议升级
    awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
  • 添加elrepo源
    rpm -Uvh https://mirrors.aliyun.com/elrepo/elrepo/el7/x86_64/RPMS/elrepo-release-7.0-5.el7.elrepo.noarch.rpm
  • 检查有哪些可以的版本(可选,可以直接执行下一步安装最新)
    yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
  • 安装内核
    # 安装最新稳定版
    yum --enablerepo=elrepo-kernel install kernel-lt -y
    # 安装指定版本
    yum --enablerepo=elrepo-kernel install kernel-lt-5.4.180-1.el7.elrepo -y
  • 生成 grub 配置文件
    grub2-mkconfig -o /boot/grub2/grub.cfg
  • 再次查看可用内核版本,并更改启动顺序
    # 更改启动顺序,此处0为最新安装的内核的序号
    grub2-set-default 0
  • 重启并检查当前生效内核版本
    #重启
    reboot
    #检查生效的内核
    uname -r
升级docker

原因:较新版本的kubernetes需要的版本较高,当前minikube官方建议是18.09及以上

  • 查看当前docker版本,低于18.09则继续升级docker version
  • 卸载当前安装的docker
    yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate
  • docker-engine安装 yum-utils 包 ,设置存储库yum install -y yum-utils
    yum-config-manager \
    --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    yum update -y
  • 安装特定版本的docker(可选)
    # 查看当前可用docker版本
    yum list docker-ce --showduplicates | sort -r
    # 安装指定版本
    yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-compose-plugin
    # 安装最新版本(推荐)
    yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
  • 启动docker并设置自动启动
    systemctl enable docker
    systemctl start docker
禁用SELinux

原因: 当前kubelet不支持SElinux模式。必须关闭以允许容器访问主机文件系统、使Pod网络正常工作
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

关闭防火墙(可选)

systemctl stop firewalld

禁用swap分区

原因:原生 kubernetes不禁用swap分区会对性能有较大影响,此处继承
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab

时间同步(可选)

注1:可以使用ntp或者chronyd,且两者不能同时使用,此处使用chronyd为例
注2:chronyd默认同步pool.ntp.org 项目中的公共服务器,也可同步其他服务器,如阿里ntp服务器
yum -y install chrony
systemctl start chronyd
systemctl enable --now chronyd
# 与公共服务器同步时间
chronyc sources

卸载 networkmanager(可选)

systemctl stop NetworkManager
yum remove NetworkManager -y

安装minikube

  • 获取minikube
  • 启动(基本命令)
    minikube start
  • 建议的启动命令
    minikube start --force --driver=docker --cni calico --image-mirror-country='cn' --container-runtime=containerd

注1:安装1.24.1版本及以上,因为kubernetes弃用了dockershim,改用containerd作为CRI,因此必须指定–container-runtime=containerd,否则kubelet无法正常启动,这个也是高版本无法正常minikube start,但是指定低于1.24.1版本就可以启动的原因
注2:–image-mirror-country='cn’是使用国内阿里云仓库代替国外谷歌仓库,解决网络慢、不通的问题,实际使用时(2023.3 2)发现谷歌仓库访问正常,阿里云仓库安装最新kubernetes版本时缺少部分镜像,所以能不加此参数时就不加
注3:如果–image-mirror-country='cn’还是拉不动镜像,比如cni指定calico网络时,无法拉取对应镜像,则建议将–image-mirror-country='cn’替换为 --registry-mirror=https://registry.docker-cn.com,当前测试可行

配置dashboard为固定service,使用proxy代理到宿主机器

dashboard配置yaml

vi  kubernetes-dashboard-nodeport-svc.yaml 

配置文件为下面的内容

apiVersion: v1
kind: Service
metadata:
  name: kubernetes-dashboard-nodeport-svc
  namespace: kubernetes-dashboard
  labels:
    addonmanager.kubernetes.io/mode: Reconcile
    k8s-app: kubernetes-dashboard
    kubernetes.io/minikube-addons: dashboard
spec:
  selector:
    k8s-app: kubernetes-dashboard
  type: NodePort
  ports:
    - protocol: TCP
      port: 9090
      targetPort: 9090
      nodePort: 30000

启动dashboard的service并开启代理,测试通过宿主机ip访问dashboard

#创建dashboard的service
kubectl apply -f kubernetes-dashboard-nodeport-svc.yaml 
#启动代理服务
#kubectl expose deployment kubernetes-dashboard/kubernetes-dashboard-nodeport-svc --type=LoadBalancer --port=30000
kubectl proxy --address='0.0.0.0'  --accept-hosts='^*$' --port=30000 &

打开宿主机ip对应的地址:
http://172.168.12.128:30000/api/v1/namespaces/kubernetes-dashboard/services/kubernetes-dashboard-nodeport-svc/proxy
kubernetes-dashboard/kubernetes-dashboard-nodeport-svc
显示下面的页面即为dashboard页面
在这里插入图片描述

更多推荐

MeterSphere v2.10.X-lts 双节点HA部署方案

一、MeterSphere高可用部署架构及服务器配置1.1服务器信息序号应用名称操作系统要求配置要求描述1负载均衡器CentOS7.X/RedHat7.X2C,4G,200GB部署Nginx,实现负载路由。部署NFS服务器。2MeterSphere应用节点1CentOS7.X/RedHat7.X8C,16GB,200G

数据可视化

一、Flask介绍#通过访问路径,获取用户的字符串参数@app.route('/user/<name>')defwelcome(name):return"你好,%s"%name@app.route('/user/<int:id>')defwelcome2(id):return"你好,%d号的会员"%id能够自动根据参数

Web 3.0 安全风险,您需要了解这些内容

随着技术的不断进步,我们正迎来一个全新的互联网时代,被称为Web3.0。Web3.0将带来许多令人兴奋的机会,但与之同时,也伴随着一系列新的安全风险。在这篇文章中,我们将探讨Web3.0的安全挑战,以帮助您更好地了解并准备迎接这个新时代。Web3.0简介Web3.0是互联网的下一代,将构建在区块链、分布式技术和智能合约

人工智能:人脸识别技术应用场景介绍

目录人脸识别介绍什么是人脸识别技术人脸识别的流程1、场景分类2、认证对比3、金融领保险应用3.1金融行业3.2保险行业4、安防交通领域4.1公园景点人脸识别闸机4.2高铁站进站人脸识别闸机5、警务领域5.1抓拍交通违法人脸识别介绍什么是人脸识别技术人脸识别技术是一种通过计算机技术和模式识别算法来识别和验证人脸的技术。它

SQLyog 各版本下载与安装(目前最新版本为13.2.0)

文章目录一、SQLyogUltimate各版本下载1.ForWindowsx642.ForWindowsx86二、SQLyogCommunity各版本下载1.ForWindowsx642.ForWindowsx863.ForLinuxx86_644.ForLinuxi386三、SQLyog安装四、如何解决SQLyog试

月木学途开发 1.后台用户模块

概述权限控制采用springsecurity数据库设计用户表DROPTABLEIFEXISTS`admin`;CREATETABLE`admin`(`aid`int(32)NOTNULLAUTO_INCREMENT,`email`varchar(50)DEFAULTNULL,`username`varchar(50)D

Java————List

一、顺序表和链表线性表(linearlist)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列…线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。1.顺序表顺序表是

java版Spring Cloud+Mybatis+Oauth2+分布式+微服务+实现工程管理系统

鸿鹄工程项目管理系统SpringCloud+SpringBoot+Mybatis+Vue+ElementUI+前后端分离构建工程项目管理系统1.项目背景一、随着公司的快速发展,企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性,公司对内部工程管理的提升提出了更高的要求。二、企业通过

9.18号作业

完善登录框点击登录按钮后,判断账号(admin)和密码(123456)是否一致,如果匹配失败,则弹出错误对话框,文本内容“账号密码不匹配,是否重新登录”,给定两个按钮ok和cancel,点击ok后,会清除密码框中的内容,继续进行登录;如果点击cancel按钮,则关闭界面。如果账号和密码匹配,则弹出信息对话框,给出提示信

函数式编程汇总

目录一.Lambda表达式实例省略规则二.Stream流案例数据准备入门实例调试技巧常用操作创建流1.单例集合2.数组3.双列集合中间操作1.filter2.map3.distinct4.sorted5.limit7.flatMap终结操作1.forEach2.count3.max&min4.collect查找与匹配1

Vue中如何封装组件,如何进行跨组件通信

封装组件和跨组件通信是Vue.js中非常重要的概念,它们有助于构建模块化、可维护和可扩展的应用程序。本文将深入讨论如何在Vue中封装组件以及如何实现跨组件通信,同时提供示例代码来帮助您更好地理解这些概念。第一部分:Vue组件的封装在Vue中,组件是可复用的UI元素,可以将其封装成独立的模块,以便在应用程序中多次使用。组

热文推荐