K8S-minikube 搭建环境(4)

minikube 搭建环境

minikube 是一个轻量级的 Kubernetes 发行版可以在本地运行单节点的 Kubernetes 集群。

kubectl 是一个命令行工具,可以通过在命令行输入各种命令与 Master Node 的 apiserver 交互,从而与 Kubernetes 集群进行交互。

  1. 命令行输入choco install minikube安装 minikube
  2. minikube version查看版本信息验证是否安装成功

如果出现类似下面的警告,那就自己到相应目录下新建一个文件

Unable to resolve the current Docker CLI context "default": context "default": context not found: open C:\Users\LittleGuai\.docker\contexts\meta\37a8eec1ce19687d132fe29051dca629d164e2c4958ba141d5f4133a33f0688f\meta.json: The system cannot find the path specified.

  1. minikube start创建一个集群

下面这条命令先不加参数,直接启动如果很慢的话,试试指定镜像源为 cn,还是慢的话加上后面的版本参数,初步学习就不用追求最新版了。

minikube start --image-mirror-country='cn' --kubernetes-version=v1.23.9

成功 start 之后就可以sudo kubectl get nodes查看集群中的节点信息了。

K3s 和 Multipass

Win 安装 Multipass 之后要启动软件再重启命令行 再执行multipass version才能看到版本信息

# 查看帮助
multipass help
multipass help <command>
# 创建⼀个名字叫做k3s的虚拟机
multipass launch --name k3s
# 在虚拟机中执⾏命令
multipass exec k3s -- ls -l
# 进⼊虚拟机并执⾏shell
multipass shell k3s
# 查看虚拟机的信息
multipass info k3s
# 停⽌虚拟机
multipass stop k3s
# 启动虚拟机
multipass start k3s
# 删除虚拟机
multipass delete k3s
# 清理虚拟机
multipass purge
# 查看虚拟机列表
multipass list
# 创建一台虚拟机
multipass launch --name k3s --cpus 2 --memory 4G --disk 10G

  

创建新的虚拟机之后由于不知道管理员密码无法进入管理员模式,就用 sudo paswd root重置密码再进入。

一个提升效率的准备工作

我们每次登录虚拟机时都得用multipass shell hostname命令,然后再输入密码,有点麻烦。

做点工作省略这些步骤。

先用multipass shell hostname登录到虚拟机中。

然后为 ubuntu 用户添加一个密码sudo passwd ubuntu(123456 就好)

对,没错,为了免密登录我们得先配置密码,出于安全考虑

然后修改 SSH 配置sudo vi /etc/ssh/sshd_config,把下面这三个都改为 yes

PubkeyAuthentication yes
PasswordAuthentication yes
KbdInteractiveAuthentication yes

  

vi 编辑器技巧

  1. 按 / 键进入搜索模式,输入待匹配字符串之后按回车,光标会跳到第一个匹配处,然后按 n 跳到下一个,N 跳到上上一个
  2. 把光标移动到一个单词的开头,按 dw 可以删除整个单词
  3. 按 i 进行编辑模式,编辑完按 Esc 退出编辑模式
  4. 在普通模式下按 : 进入命令模式,输入 wq 保存退出

编辑好 SSH 配置文件之后要重启 SSH 服务sudo service ssh restart

做完上面这些工作之后就可以用 SSH 来登录虚拟机了,执行ssh ubuntu@ip命令后输入密码登录

说好的免密登录呢?别急,往下看

配置免密登录

先了解一下原理——非对称加密,我们用自己的电脑生成一对公钥和私钥,私钥保存好,公钥发给各个虚拟机,这样就能通过匹配公钥和私钥进行登录而不用输入密码

先用 ssh 生成一对公钥和私钥ssh-keygen -t rsa -b 4096,回车之后会提示为文件设置密码,建议直接回车不设密码

gen:generate,-t:type 密钥类型,-b:bit 位数

生成密钥后到当前用户下的 .ssh 目录下 ls 查看公钥和私钥的文件。

我们需要把公钥复制到虚拟机中,Linux 和 Mac直接执行ssh-copy-id username@remote_host就可以自动把本地的公钥复制到虚拟机中,然鹅,Windows 系统不支持这个命令,有两个办法可以解决。

ssh-copy-id 命令用于将本地计算机上的公钥添加到远程主机的 ~/.ssh/authorized_keys 文件中

  1. 既然 Windows 不行那我们就找个 Linux,想想有Windows 上有什么是 轻量级 Linux 系统?GitBash,用 GitBash 进入到 .ssh 文件夹下,然后执行命令。需要你输入前面设置的密码。
  2. ssh-copy-id 命令的本质是把本地的公钥添加到远程虚拟机的~/.ssh/authorized_keys文件里,PowerShell 行不通那就自己复制,把 .ssh/id_rsa.pub 的内容复制出来,到虚拟机中写入就好了。

配置命令别名

每次都要输入ssh hostname@ip也是有点麻烦,我们给这个命令起个别名更方便一些

  • Linux 和 MacOS 可以直接用 alias 直接给命令起别名,但 Windows 又没这个命令,得另外想办法。
    注意如果只是用命令alias master='ssh ubuntu@ip'起别名的话只是临时有效,想永久生效的话得把命令保存到.bash_profile文件中。(原理是保存到文件后每次打开终端都会加载这个别名)

Linux 优势之一

  • Windows 先在命令行中输入echo $PROFILE,查看 PowerShell 配置文件的位置
PS C:\Users\LittleGuai> echo $PROFILE
D:\文档\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

  进入到 D:\文档\WindowsPowerShell文件夹下,新建一个文件命名为Microsoft.PowerShell_profile.ps1,用记事本打开输入命令别名,保存关闭文件后重新开一个命令行

注意 multipass 创建的虚拟机重启之后会重新分配 IP,所以如果重启了虚拟机这里的 IP 也要跟着改。

 如果遇到报错看看下面的报错合集里有没有,没有就继续。

master 操作完之后 worker 也一样的操作,耐点心,后面会方便很多。

千辛万苦终于到了这里,现在终于可以轻松登录虚拟机了。

如果你输入别名后久久连不上,那就检查一下 IP 吧。

K3s 创建集群

  • 登录虚拟机后执行命令创建,这里用的是国内的镜像
ubuntu@k3s:~$ curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -

  安装好之后sudo kubectl get nodes查看已有节点,这个是 Master 节点

ubuntu@k3s:~$ sudo kubectl get nodes
NAME   STATUS   ROLES                  AGE   VERSION
k3s    Ready    control-plane,master   15m   v1.29.3+k3s1
  • 在 Master 节点上获取 token,这个 token 是其它节点加入集群的凭证
ubuntu@k3s:~$ sudo cat /var/lib/rancher/k3s/server/node-token
# 你自己的token
  • 接下来添加环境变量 TOKEN 和 MASTER_IP

Linux 和 Mac 用户执行这条命令

TOKEN=$(multipass exec k3s sudo cat /var/lib/rancher/k3s/server/node-token)

TOKEN=:这是声明一个名为 TOKEN 的变量。

$(...):命令替换的语法,它会执行括号中的命令,并将其输出作为整个表达式的结果。

exec 是 multipass 命令的一个子命令,用于在指定的虚拟机实例中执行命令。

multipass exec k3s sudo cat /var/lib/rancher/k3s/server/node-token:指定 k3s 虚拟机执行sudo cat /var/lib/rancher/k3s/server/node-token

整个命令最终的结果就是把 node-token 文件里的值赋值给环境变量 TOKEN

然后执行echo $TOKEN查看变量值

Windows 用户执行这一条,这条命令的效果跟自己到系统变量里添加一个 TOKEN 变量是一样的,不想输命令就常规操作

[Environment]::SetEnvironmentVariable("TOKEN", $(Invoke-Expression "multipass exec k3s sudo cat /var/lib/rancher/k3s/server/node-token"), [System.EnvironmentVariableTarget]::Machine)

下面这条命令只会在当前会话中保持有效,关闭会话就消失了,了解即可

$env:TOKEN = Invoke-Expression "multipass exec k3s sudo cat /var/lib/rancher/k3s/server/node-token"

$env:TOKEN查看变量值

  • 然后获取 Master 节点的 IP
    Linux/Mac:MASTER_IP=$(multipass info k3s | grep IPv4 | awk '{print $2}')
    Windows:[Environment]::SetEnvironmentVariable("MASTER_IP", $(Invoke-Expression 'multipass info k3s | Select-String "IPv4" | ForEach-Object { $_.ToString().Split(" ")[-1] }'), [System.EnvironmentVariableTarget]::Machine)

这里注意 Invoke-Expression 后面用单引号,用双引号的话会与子命令的双引号匹配而提前结束命令

下面这条命令也只是设置临时变量,了解即可

$env:MASTER_IP = Invoke-Expression 'multipass info k3s | Select-String "IPv4" | ForEach-Object { $_.ToString().Split(" ")[-1] }'

获取后$env:MASTER_IP查看变量值

Windows 一般在设置完系统变量之后要重新打开会话载入变量

  • 接下来就可以创建 Worker 节点了,我们创建两个 worker1 和 worker2

multipass launch --name worker1 --cpus 2 --memory 2G --disk 10G

如果在这里遇到报错launch failed: Start-VM,去下面找找,没有就跳过

创建完把两台工作机都配置免密登录

  • 给两台 Worker 安装 k3s 并设置环境变量
 for f in 1 2; do
     multipass exec worker$f -- bash -c "curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=\"https://$MASTER_IP:6443\" K3S_TOKEN=\"$TOKEN\" sh -"
 done

  Linux/Mac 用户直接执行,Windows 用户用 GitBash 执行,复制后在 GitBash 中 Shift+Insert 粘贴。

ToLearnL:这里我还没搞懂怎么在 PowerShell 上实现,有兴趣的同学可以试试下面这段,我用 GitBash 装好之后再执行这段就没反应了

foreach ($f in 1, 2) {
  Invoke-Expression "multipass exec worker$f -- bash -c `"curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=`"https://$MASTER_IP:6443`" K3S_TOKEN=`"$TOKEN`" sh -`""
}

  PowerShell 中会解析双引号里的变量但不解析单引号里的,这里面带了 $f,所以得用双引号包裹,其他引号就得用反单引号 ` 转义

完成上面的工作之后登录 Master,执行sudo kubectl get nodes,就能看到集群信息了

ubuntu@k3s:~$ sudo kubectl get nodes
NAME      STATUS   ROLES                  AGE   VERSION
k3s       Ready    control-plane,master   20h   v1.29.3+k3s1
worker1   Ready    <none>                 62m   v1.29.3+k3s1
worker2   Ready    <none>                 62m   v1.29.3+k3s1
ubuntu@k3s:~$

  

posted @ 2025-07-11 21:18  arroa  阅读(68)  评论(0)    收藏  举报