跳到主要内容

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 pulldocker 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-addressport 为您的代理服务器地址和端口)

[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("密码匹配")
}
}