什么是云原生?云原生是在云计算环境中构建、部署和管理现代应用程序的软件方法。

想学习云原生相关的东西,而我们已经掌握如何使用docker,而直接上手kubernets又未免有些难度,此时minikube是个不错的选项。

minikube可以在macOS、Linux和Windows上快速设置本地Kubernetes集群。minikube是本地Kubernetes,专注于简化Kubernetes的学习和开发。

我的环境是WSL2 Fedora42

image.png

安装minikube并启动集群

拉取RPM安装包并安装

1
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-latest.x86_64.rpm
1
sudo rpm -Uvh minikube-latest.x86_64.rpm

验证是否安装成功

1
2
3
minikube version
# minikube version: v1.36.0
# commit: f8f52f5de11fc6ad8244afac475e1d0f96841df1-dirty

启动集群

1
minikube start

启动成功

image.png

用于停止minikube集群的指令

1
minikube stop

安装kubectl

kubectl是kubernetes的命令行工具,用于与kubernetes集群进行交互。它允许用户管理和操作kubernetes资源,如PodsDeploymentsServices

kubectl版本和集群版本之间的差异必须在一个小版本号内。 例如:v1.33版本的客户端能与v1.32v1.33v1.34版本的控制面通信。 用最新兼容版的kubectl有助于避免不可预见的问题。

安装过程依然以我的Fedora系统为例,其他系统参考官方教程

添加kubernets的yum仓库,以下为v1.33版本,替换版本号即可更换为其他版本

注意,以下指令这覆盖/etc/yum.repos.d/kubernetes.repo中现存的所有配置

1
2
3
4
5
6
7
8
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.33/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.33/rpm/repodata/repomd.xml.key
EOF

要将kubectl升级到别的次要版本,你需要先升级 /etc/yum.repos.d/kubernetes.repo 中的版本,再运行 yum update 命令。详细操作及介绍见:更改 Kubernetes 软件包仓库 | Kubernetes

使用yum安装kubectl

1
sudo yum install -y kubectl

获取集群的状态,检验kubectl是否安装成功

1
kubectl cluster-info

可以看到还在运行中的mikukube集群

1
2
3
4
Kubernetes control plane is running at https://127.0.0.1:32771
CoreDNS is running at https://127.0.0.1:32771/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

启用shell的kubernets命令自动补全功能,以zsh为例。在~/.zshrc中添加以下内容,然后刷新zsh即可

1
source <(kubectl completion zsh)

云原生

成功在本地运行了minikube集群后,先学习一些理论知识

从本质上讲,云原生是一种设计、构建和运行应用程序的方式,这些应用程序完全采用云计算的功能。其价值不仅在于云端托管,而是创建具有以下特点的系统:

  • 可扩展:轻松应对百万级用户
  • 高容错:故障自动恢复
  • 敏捷性:支持快速高频部署

云原生的实际应用

网飞(netflix)

  • netflix利用微服务和kubernetes技术,服务全球超过2亿用户
  • 每个功能模块(如推荐、搜索、流媒体处理)都作为独立的微服务运行
  • 有趣的是,netflix每天进行多次代码更新,且不会导致系统停机

优步(uber)

  • uber的叫车应用依托云原生原则,实时匹配数百万名司机和乘客
  • 通过使用容器技术和可观测性工具,确保应用性能的无缝体验

应该学些什么

  • 容器Docker
    容器就像是应用程序的午餐盒。它们将应用及其依赖项打包在一起,确保在不同环境中都能顺利运行。例如,开发者可以使用docker创建一个web应用。想要学习容器技术,可以从docker入手

  • Kubernetes
    kubernetes就像是容器的交通指挥员,负责管理和调度容器的运行。它可以在销售期间自动扩展在线商店的服务器,以应对流量高峰。学习kubernetes将帮助你更好地管理容器化应用

  • 微服务
    微服务是一种将应用拆分为更小、独立服务的架构方式。比如,亚马逊的电子商务平台就是由多个微服务组成的。想要掌握微服务架构,可以学习spring boot

  • CI/CD(持续集成/持续交付)
    ci/cd是自动化代码集成和部署的过程。通过github,可以实现自动化测试和部署,提升开发效率。学习github actions将帮助你实现ci/cd流程

  • 可观测性
    可观测性是监控系统健康和性能的能力。例如,优步能够实时检测系统问题,确保服务的稳定性。想要深入了解可观测性,可以学习prometheus和grafana

基本概念

kubernets(k8s)

kubernetes是一个用于管理容器的平台,容器将应用的代码、配置及依赖项捆绑在一起,使其能够作为一个具有自身资源的独立进程运行。每个应用都会有其专属的一个或多个容器,而且这些容器被整合到kubernetes容器集中

kubernetes可以在裸机服务器、虚拟机、公共云提供商、私有云和混合云环境中运行。kubernetes的一大优势就是它可以在许多不同类型的基础架构上运行

k3s

k3s是由Rancher主导开发的kubernetes发行版。它在不分叉的基础上构建了上游项目。概念上,kubernetes发行版类似于linux操作系统:k3s是一种kubernetes发行版,就像ubuntu是一种linux发行版一样。k3s在保留kubernetes功能的基础上,还增加了自己的功能

k3s经过专门设计,即使在最小的硬件环境中也能良好运行。k3s提供了一个小于60MB的单个二进制文件。这个轻量级可执行文件包含了启动完全功能的kubernetes集群所需的一切

通过放弃非必要的kubernetes功能(如云服务提供商集成和非CSI存储提供商),实现了这个小巧的二进制文件大小。利用go语言的goroutines,将各个kubernetes组件从单个入口点运行起来

minikube

minikube是一个创建单机kubernetes集群的工具,它可以在一台服务器上快速创建一个学习环境,单机集群也可以学习到大多数入门的kubernetes知识以及上手练习


简单来说就是minikube基本只能供学习使用,相比k8s和k3s对初学者更加友好,而k3s作为轻量级的k8s发行版可以用在生产环境中