跳到主要内容

kubectl 测试集群与外部网络连通性

· 阅读需 1 分钟
素明诚
Full stack development

要使用 kubectl 来检查集群中的 Pod 是否能与外部网络进行通信,但是没有办法直接 ping。你可以

创建一个临时的测试 Pod您可以创建一个临时的 Pod,用于测试网络连通性。通常使用一个简单的镜像如 busybox 来进行此类测试。

运行测试命令在创建的测试 Pod 中,使用 ping 命令来测试外部地址的连通性。例如

kubectl run curlpod --image=busybox --restart=Never -- ping -c 4 google.com

这条命令会启动一个名为 curlpod 的 Pod,使用 busybox 镜像,并执行 ping google.com 命令。

检查输出查看输出来确认是否成功连接到外部网络。如果命令执行成功,您将看到 ping 命令的结果。

清理资源测试完成后,记得删除测试用的 Pod 以释放资源

kubectl delete pod curlpod

搞集群前一定一定要先配置好网络,对于新手来说,大部分错误都是网络问题。

Go 项目打包不同平台和版本

· 阅读需 2 分钟
素明诚
Full stack development

在 Windows 上打包 Windows 版本​

go build -o xApp-windows.exe

在 macOS 上打包 macOS 版本​

go build -o xApp-macos

在 Linux 上编译 x86 版本​

GOARCH=amd64 go build -o xApp-linux-x86

在 Linux 上编译 ARM 版本​

GOARCH=arm64 go build -o xApp-linux-arm

Windows 32 位​

如果你需要支持 32 位的 Windows 系统,你可以使用 GOARCH=386 来编译 32 位版本的可执行文件。

SET GOARCH=386&& go build -o xApp-windows-32bit.exe

macOS ARM 架构(Apple Silicon)​

对于采用 Apple Silicon(M1 芯片)的 macOS 设备,你可以使用 GOARCH=arm64 来编译适用于 ARM 架构的 macOS 可执行文件。

GOOS=darwin GOARCH=arm64 go build -o xApp-macos-arm

CGO 和交叉编译​

如果你的 Go 项目使用了 CGO(调用 C 代码),交叉编译可能会更加复杂。你可能需要安装目标平台的 C 编译器和相关工具链。

在这种情况下,你可能需要使用 Docker 来设置适当的交叉编译环境。

外部依赖和静态链接​

如果你的项目依赖于外部 C 库,你可能需要考虑静态链接这些库,以确保在目标系统上的可移植性。

你可以使用 -ldflags "-linkmode external -extldflags -static" 标志来实现静态链接。

go build -ldflags "-linkmode external -extldflags -static" -o xApp

Linux 安装 Minikube 详细操作

· 阅读需 2 分钟
素明诚
Full stack development

安装依赖​

更新系统依赖

sudo apt update && sudo apt upgrade

安装必要依赖

sudo apt install -y curl wget apt-transport-https

添加用户组​

添加当前用户到 docker 组

sudo usermod -aG docker $USER
newgrp docker

这里的 sudo usermod -aG docker $USER 将当前用户添加到 docker 组。为了使这一变更生效,通常需要注销再重新登录,或者开启一个新的终端会话。使用 newgrp docker 命令可以在当前会话中立即应用更改。

安装 Minikube​

下载 Minikube

curl -LO https//storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

验证安装

minikube version

启动 Minikube​

使用 Docker 作为驱动,Minikube 会在一个 Docker 容器内部运行 Kubernetes 集群,而不是创建一个完整的虚拟机。这种方法更轻量级,因为它利用了现有的操作系统环境和 Docker 的容器技术。

minikube start --driver=docker

验证 Minikube 是否成功启动​

minikube status
kubectl cluster-info

正常输出示例​

minikube
type Control Plane
host Running
kubelet Running
apiserver Running
kubeconfig Configured

手动调整 Minikube 资源​

停止 Minikube

minikube stop

调整配置​

永久更改配置

minikube start --cpus 8 --memory 16384

重新启动 Minikube​

minikube start

确认 kubectl 配置​

检查 kubectl 的配置文件,确保其指向正确的 Kubernetes API 地址

kubectl config view

查看 Minikube IP 地址,确认服务器配置

minikube ip

修正 kubectl 配置​

如果配置文件中的集群地址不正确,可以使用以下命令来设置正确的集群信息

kubectl config set-cluster minikube --server=https//192.168.49.28443 --certificate-authority=/home/gptadmin/.minikube/ca.crt
kubectl config set-context minikube --cluster=minikube --user=minikube
kubectl config use-context minikube

查看集群信息​

获取 Kubernetes 控制平面的状态和地址

kubectl cluster-info

列出所有节点​

显示 Minikube 集群中的所有节点信息

kubectl get nodes

查看所有命名空间的 Pods​

列出集群中所有命名空间的 Pods

kubectl get pods --all-namespaces

Linux 安装 kubectl

· 阅读需 1 分钟
素明诚
Full stack development

下载 kubectl​

下载最新稳定版的 kubectl。这个命令会查询 Kubernetes 的最新稳定版本号,并下载对应版本的 kubectl 二进制文件。

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

使 kubectl 可执行​

赋予下载的 kubectl 可执行权限。

chmod +x ./kubectl

将 kubectl 移动到系统路径中​

移动 kubectl 到 /usr/local/bin。所有用户都能访问 kubectl 命令。

sudo mv ./kubectl /usr/local/bin/kubectl

将 kubectl 放置在 /usr/local/bin 目录下,因为这个目录通常已经包含在环境变量 $PATH 中。

验证安装​

检查 kubectl 的版本来确认安装。这不仅会显示版本信息,也确认了 kubectl 可以正常运行。

kubectl version --client

Linux Rancher 快速配置 K8S

· 阅读需 1 分钟
素明诚
Full stack development

下载镜像​

rancher/rancher:latest

docker-compose​

version: '3'
services:
rancher:
image: rancher/rancher:latest
restart: unless-stopped
privileged: true
environment:
HTTP_PROXY: "http://clash:7890"
HTTPS_PROXY: "http://clash:7890"
ports:
- 80:80
- 443:443
volumes:
- ./rancher-data:/var/lib/rancher
networks:
- clash
networks:
clash:
external: true

启动​

docker-compose up -d

bd0c2bee183de6667356758225a7fc83

按照提示进行配置

7f26ebfe0c0ebdda7a678c44ad630a82da568be6149956bbb6f82b05c22b0af97f34ac6a6f43cfab35128d8975ecb8cd### 记得查看下 logger 看看是否都成功了
6b153c4b7c3fef45c63b62b69e3cab38## 下方的事件列表(Events)详细记录了集群中发生的一系列事件

  • 成功分配 cattle-provisioning-capi-system/capi-controller-manager 资源
  • 从镜像仓库拉取 rancher/mirrored-cluster-api-controller 镜像
  • 创建和扩容 capi-controller-manager 等 Pod
  • 启动、创建和拉取容器镜像等操作

Docker 配置代理临时永久设置

· 阅读需 2 分钟
素明诚
Full stack development

命令行临时设置​

在命令行中临时设置代理

export HTTP_PROXY="http://127.0.0.1:7890"
export HTTPS_PROXY="http://127.0.0.1:7890"
docker pull ubuntu

docker pull 临时设置代理​

为了单次 docker pull 或 docker push 命令使用特定的代理,您可以直接在命令行中设置环境变量。这样设置的环境变量只对当前命令有效,不会影响到其他会话或命令。

示例 使用临时代理拉取 Docker 镜像​

HTTP_PROXY="http://127.0.0.1:7890" HTTPS_PROXY="http://127.0.0.1:7890" docker pull ubuntu

这假定您有一个在本地端口 7890 运行的代理服务器。

永久配置​

systemd​

创建或编辑 Docker 服务的 systemd 配置文件

打开或创建 /etc/systemd/system/docker.service.d 目录下的 http-proxy.conf 文件(如果目录不存在,则需要创建它)

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf

在文件中添加 HTTP_PROXY 和 HTTPS_PROXY 环境变量 在该文件中,添加以下内容(替换 your-proxy-address 和 port 为您的代理服务器地址和端口)

[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com"
  • NO_PROXY 环境变量用于列出不需要通过代理的地址或域,比如本地的 Docker registry。

重新加载 systemd 管理器配置 重新加载 systemd 以读取新的配置文件

sudo systemctl daemon-reload

重启 Docker 服务 重新启动 Docker 服务以应用代理设置

sudo systemctl restart docker

验证代理设置 检查 Docker 是否已经使用代的环境变量

systemctl show --property=Environment docker

确保没有防火墙或安全设置阻止 Docker 访问代理服务器。

Linux 安装使用 FileBrowser

· 阅读需 1 分钟
素明诚
Full stack development

安装 FileBrowser​

Docker 安装 FileBrowser,首先创建docker-compose.yml 的文件

version: '3.8'
services:
filebrowser:
image: filebrowser/filebrowser:latest
container_name: filebrowser
ports:
- "8080:80"
volumes:
- /path/to/your/files:/srv
restart: unless-stopped

以启动 FileBrowser

docker-compose up -d

访问和配置 FileBrowser​

浏览器访问 http://<您的IP或域名>:8080 来使用 FileBrowser。

首次登录​

  • 用户名: admin
  • 密码: admin

高级功能​

FileBrowser 支持一些高级功能,例如设置磁盘配额、限制访问权限和启用 HTTPS

HTTPS 配置:建议启用 HTTPS 来安全地使用 FileBrowser。您可以在 Docker Compose 文件中配置反向代理和 SSL/TLS。

自定义用户权限:您可以为不同用户设置不同的访问权限,以管理谁可以访问什么内容。

Harbor 配置并生成认证信息

· 阅读需 2 分钟
素明诚
Full stack development

快速配置 Harbor 和生成认证信息​

Harbor 是一个开源的镜像仓库,提供了强大的功能来管理和分发 Docker 镜像。为了能够推送和拉取镜像,我们需要正确配置 Harbor 并生成相应的认证信息。本文将介绍如何快速配置 Harbor 和生成认证信息,以便与 Docker 客户端进行交互。

Harbor 创建用户账户​

  • 在 Harbor 的 Web 界面中,点击左侧导航栏的 "系统管理" -> "用户管理"。
  • 点击 "新建用户" 按钮,填写用户名、邮箱、密码等信息,并选择适当的用户角色(例如 "开发人员" 或 "项目管理员")。
  • 点击 "确定" 按钮创建新用户。

生成 Docker 认证信息​

  • 使用新创建的用户账户登录 Harbor。
  • 点击右上角的用户名,选择 "用户配置"。
  • 在 "用户配置" 页面中,找到 "Docker CLI" 部分。
  • 复制提供的 docker login 命令
docker login -u 用户名 -p 密码 registry地址
  • 在终端中执行该命令,将 用户名、密码 和 registry地址 替换为实际的值。
  • Docker 会将认证信息保存在 ~/.docker/config.json 文件中。

推送和拉取镜像​

使用 docker tag 命令为镜像添加适当的标签,指向 Harbor 的 registry 地址和仓库名称

docker tag 镜像名:标签 registry地址/项目名/仓库名:标签

使用 docker push 命令将镜像推送到 Harbor

docker push registry地址/项目名/仓库名:标签

使用 docker pull 命令从 Harbor 拉取镜像

docker pull registry地址/项目名/仓库名:标签

Docker 将自动使用之前生成的认证信息进行身份验证

Linux Bashtop 安装使用指南

· 阅读需 2 分钟
素明诚
Full stack development

bashtop​

265fcc37dc81fb5e8db6aa6d1bb78f21## 安装

Ubuntu/Debian​

sudo apt install bashtop

CentOS/RHEL​

sudo yum install epel-release
sudo yum install bashtop

Fedora​

sudo dnf install bashtop

Arch Linux​

sudo pacman -S bashtop

macOS (通过 Homebrew)​

brew install bashtop

使用​

安装完成后,在终端直接运行 bashtop 命令即可启动。

bashtop

界面说明​

  • CPU 使用率:显示每个 CPU 核心的使用率柱状图
  • 内存使用:显示内存和交换空间的使用量
  • 磁盘使用:显示挂载的文件系统的使用量
  • 网络流量:显示实时的上传和下载流量
  • 进程列表:显示当前运行的进程,可以按 CPU 或内存使用排序

交互操作​

  • UP/DOWN:上下移动选择进程
  • PgUP/PgDn:上下翻页
  • a:显示所有进程或仅显示活动进程
  • f:进入进程过滤模式
  • +/-:调整进程列表刷新间隔
  • q:退出 bashtop

注意事项​

  • Bashtop 需要 root 权限才能完整地获取系统信息,因此最好使用 sudo 运行
  • Bashtop 会消耗一定的系统资源,在资源紧张的服务器上要慎用
  • 频繁刷新进程列表可能会增加系统负载,酌情调整刷新间隔

Go bcrypt 加密和验证

· 阅读需 2 分钟
素明诚
Full stack development

用户密码操作逻辑​

ab8728506ace7f3843be0b7ec061dcee## 解密原理

假设用户加密后的密码是 $2a$10$nOUIs5kJ7naTuTFkBy1veuK0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa

应用程序从数据库读取存储的 bcrypt 哈希字符串,就是上面那一串

bcrypt 库解析这个哈希字符串​

  • 提取算法标识符: $2a$
  • 提取成本因子: 10
  • 提取盐值: nOUIs5kJ7naTuTFkBy1veu

bcrypt 解密流程​

  • bcrypt 库现在知道它需要使用 $2a$ 算法,成本因子 10,以及盐值 nOUIs5kJ7naTuTFkBy1veu。
  • 应用程序将用户输入的密码,提取的盐值 (nOUIs5kJ7naTuTFkBy1veu) 和成本因子 (10) 传递给 bcrypt。
  • bcrypt 使用提供的盐值和成本因子,根据 $2a$ 算法对用户输入的密码进行哈希计算。
  • bcrypt 返回计算出的哈希值。
  • 程序比较计算出的哈希值和存储的哈希值 (K0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa)。
  • 如果两个哈希值匹配,则密码验证通过。否则,密码验证失败。

流程图如下​

2a655cea1bc7fe3d7c3f1996bb0b5c08## Go 加密解密示例代码

package main

import (
"fmt"
"golang.org/x/crypto/bcrypt"
)

func main() {
// 原始密码
password := "MyPassword123"

// 加密密码
hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
if err != nil {
fmt.Println("加密错误:", err)
return
}
fmt.Println("加密后的密码:", string(hashedPassword))

// 验证密码
err = bcrypt.CompareHashAndPassword(hashedPassword, []byte(password))
if err != nil {
fmt.Println("密码不匹配")
} else {
fmt.Println("密码匹配")
}
}