跳到主要内容

115 篇博文 含有标签「开发工具与环境」

开发工具和环境配置相关文章

查看所有标签

修改 Ubuntu 2204 中的 Kubernetes 包源

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

备份现有的 Kubernetes 源文件

在修改之前,首先备份你的现有 Kubernetes 源文件,以便必要时可以恢复原始设置。

sudo cp /etc/apt/sources.list.d/kubernetes.list /etc/apt/sources.list.d/kubernetes.list.backup

编辑 Kubernetes 源文件

使用文本编辑器编辑 Kubernetes 源文件。你可以使用 nano 或你喜欢的任何编辑器:

sudo nano /etc/apt/sources.list.d/kubernetes.list

替换为新的源

选择使用阿里云的 Kubernetes 镜像,你应该将文件内容更改为

deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main

清华大学镜像源,将内容更改为

deb https://mirrors.tuna.tsinghua.edu.cn/kubernetes/apt/ kubernetes-xenial main

保存文件并退出编辑器。

添加镜像源的 GPG 密钥

为了确保 apt 可以信任新源的软件包,你需要添加镜像源的 GPG 密钥。

curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -

清华大学源:

curl -s https://mirrors.tuna.tsinghua.edu.cn/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -

更新软件源

更新 apt 的软件包列表以反映源的变更

sudo apt update

测试新源

你可以尝试安装或更新一个 Kubernetes 包来确认新的源是否工作正常

sudo apt install kubectl

或者如果已经安装了,尝试更新看是否有新版本

sudo apt update && sudo apt upgrade

设置 SSH 密钥进行身份验证

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

生成 SSH 密钥

打开终端。输入以下命令来生成一个新的 SSH 密钥对(如果你还没有的话

ssh-keygen -t rsa -b 4096

按照提示进行操作,可以为密钥设置一个密码,也可以留空。

将公钥复制到服务器

使用 ssh-copy-id 命令将你的公钥复制到服务器上,以便你可以无密码登录

ssh-copy-id -i ~/.ssh/id_rsa.pub -p 50022 itadmin@192.168.33.111
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 50022 itadmin@192.168.33.110

替换 -i 后面的路径如果你的密钥保存在不同的位置。

连接服务器

nano ~/.ssh/config

Host 111
HostName 192.168.33.111
User itadmin
Port 50022
Host 110
HostName 192.168.33.110
User itadmin
Port 50022

一旦你的公钥被添加到服务器的 ~/.ssh/authorized_keys 文件中,你就可以不需要密码直接连接了

ssh 111
ssh 110

这种方法不仅安全,还方便,因为一旦设置完成,你就可以无需输入密码快速连接到服务器。

Microk8s 单机集群上的服务负载均衡实践

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

部署结构

72b99c9f5f751e012cf7d0ab52ffc848## 安装 microk8s
素明诚:Ubuntu 安装 MicroK8s## 配置 microk8s

安装插件

MetalLB: 这是一个负载均衡器实现,可以为 Kubernetes 服务提供外部 IP 地址。在裸机 Kubernetes 集群(如单节点 Microk8s 集群)中,MetalLB 通常用来替代云平台上的负载均衡服务。

Ingress: Ingress 是一种 Kubernetes 资源,用于管理从集群外部到集群内服务的访问。它可以提供 SSL 终止、基于名称的虚拟主机等功能。

metallb

安装时候输入你的想要地址段192.168.1.240-192.168.1.250

microk8s enable metallb

查看是否正常

microk8s kubectl get pods -n metallb-system

ingress

microk8s enable ingress

测试

watch -n 0.5 curl http://192.168.1.240:9999

负载均衡效果

43cf27748d6ed22b09fa13243e449a3e

service

ee62e0086785c3531c31f0d1fd6b1c78

ingress

配置文件

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: go-sec-kill
spec:
replicas: 3
selector:
matchLabels:
app: go-sec-kill
template:
metadata:
labels:
app: go-sec-kill
spec:
containers:
- name: go-sec-kill
image: smcroot/go-sec-kill
ports:
- containerPort: 8080
imagePullPolicy: IfNotPresent
resources:
requests:
memory: "1Gi" # 请求1GB内存
cpu: "500m" # 请求0.5 CPU
limits:
memory: "2Gi" # 限制最多使用2GB内存
cpu: "1" # 限制最多使用1个CPU

service.yaml

apiVersion: v1
kind: Service
metadata:
name: go-sec-kill
spec:
type: LoadBalancer
selector:
app: go-sec-kill
ports:
- protocol: TCP
name: http
port: 9999
targetPort: 8080

ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-sec-kill-ingress
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: go-sec-kill
port:
number: 9999

ipaddresspool.yaml

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: my-ip-pool
namespace: metallb-system
spec:
addresses:
- 192.168.1.240-192.168.1.250

Snap 常用命令代理配置

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

Ubuntu 自 16.04 LTS(Xenial Xerus)起开始预装 snapd,因此在大多数 Ubuntu 系统上,用户可以直接使用 Snap

安装 Snap(如果系统尚未安装)

对于 Debian 或其他未预装 Snap 的系统,可以使用以下命令安装

sudo apt update
sudo apt install snapd

snap version

使用场景

  • Snap:适合快速更新和多平台部署的桌面或开发应用。
  • APT/DNF:适合对稳定性和资源使用有高要求的服务器环境。

配置代理

sudo snap set system proxy.http="http://172.22.220.64:7890"
sudo snap set system proxy.https="http://172.22.220.64:7890"

常用命令

命令说明
snap install <包名>安装指定的 Snap 包
snap remove <包名>移除指定的 Snap 包
snap list列出已安装的 Snap 包
snap refresh更新所有 Snap 包
snap refresh <包名>更新指定的 Snap 包
snap find <搜索词>搜索可用的 Snap 包
snap info <包名>查看指定 Snap 包的详细信息
snap revert <包名>将指定包回滚到上一个版本
snap enable <服务名>启用 Snap 包中的服务
snap disable <服务名>禁用 Snap 包中的服务
snap start <服务名>启动 Snap 包中的服务
snap stop <服务名>停止 Snap 包中的服务

Snap 与 APT/DNF 的关键区别

自包含性

  • Snap:包含所有依赖,防止依赖冲突,可在多种 Linux 上运行。
  • APT/DNF:依赖系统库,有时会因版本冲突出问题。

沙箱隔离

  • Snap:应用在隔离环境中运行,提高安全性。
  • APT/DNF:应用可访问整个系统,潜在风险更高。

更新机制

  • Snap:自动更新,支持快速回滚。
  • APT/DNF:需要手动触发更新,回滚复杂。

跨平台支持

  • Snap:同一包可用于所有支持的 Linux 发行版。
  • APT/DNF:通常只适用于特定的 Linux 发行版。

资源占用

  • Snap:因包含依赖而占用较多空间和资源。
  • APT/DNF:共享依赖,更节约资源。

Ubuntu 安装 MicroK8s

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

安装 MicroK8s

MicroK8s 是通过 Snap 包提供的,因此确保你的系统支持 Snap 包。在 Ubuntu 上,Snap 通常已经预安装。

安装 MicroK8s

sudo snap install microk8s --classic

--classic 标志表示允许 Snap 包访问系统的更多资源。

0f8aeecf45018094ce7651154df1b94c

安装成功

卸载

sudo snap remove microk8s --purge

添加用户到 MicroK8s 组

为了避免在使用 MicroK8s 命令时总是需要 sudo,可以将你的用户添加到 microk8s

sudo usermod -a -G microk8s $USER
sudo chown -f -R $USER ~/.kube

然后你需要注销再登录,使更改生效。

检查 MicroK8s 状态

使用以下命令检查 MicroK8s 是否正确安装并正在运行

microk8s status --wait-ready

bb025162c99abe0f53cfd24e360aae49

如果没有看到正常输出,或者卡住,大概率是网络问题。你需要配置代理

配置 MicroK8s 代理

为了确保 MicroK8s 内部的 Kubernetes 组件也能使用代理,你可以修改 MicroK8s 的服务定义,添加环境变量。MicroK8s 使用 systemd 服务管理其组件,因此你可以直接修改这些服务文件:

sudo nano /var/snap/microk8s/current/args/containerd-env

在该文件内添加以下行,换成你的代理地址

export HTTP_PROXY=http://172.22.220.64:7890
export HTTPS_PROXY=http://172.22.220.64:7890
export NO_PROXY=localhost,127.0.0.1,.cluster.local

保存并关闭文件。然后,重启 MicroK8s 以使更改生效

microk8s stop
microk8s start

启用 MicroK8s 服务

MicroK8s 提供了许多 Kubernetes 的标准服务和附加组件。你可以根据需要启用

DNS: DNS 插件是 Kubernetes 集群中的核心,负责在集群内部提供名称解析服务,使得 Pods 能够通过服务名而非 IP 地址相互通信。

Dashboard: Kubernetes Dashboard 提供了一个基于 Web 的用户界面,允许用户直观地管理和监控集群中的资源,如 Pods 和 Deployments。

Storage: 存储插件允许在 Kubernetes 集群中配置持久化存储解决方案,支持如持久卷(Persistent Volumes)等存储资源的使用

microk8s enable dns dashboard storage

访问 Kubernetes Dashboard

如果你启用了 dashboard,可以通过以下命令获取访问令牌

microk8s dashboard-proxy

30d12ece67bdbdbec631efdbfabd4002## 标准的 kubectl 命令而不是每次都键入 microk8s kubectl

1. 修改别名

nano ~/.bashrc  # 或者 ~/.zshrc,取决于你使用的 shell
# 在文件的末尾添加以下行
alias kubectl='microk8s kubectl'
# 保存并关闭文件,然后重新加载配置
source ~/.bashrc # 或者 source ~/.zshrc

2. 使用 Bash 中的>操作符来强制覆盖

microk8s config > ~/.kube/config

参考文档

MicroK8s 的https://microk8s.io/docs

安装 Helm 配置代理

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

安装 Helm

如果你使用的是 Ubuntu 或者其他基于 Debian 的系统,建议通过snap安装Helm

sudo snap install helm --classic

安装完成后,你可以通过以下命令验证Helm是否正确安装

helm version

如果你使用的是其他 Linux 发行版或操作系统,也可以直接从官方获取Helm。以下是通用的安装步骤

通过脚本安装 Helm

你可以使用 Helm 官方提供的安装脚本

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

手动安装 Helm

你也可以从https://helm.sh/docs/intro/install/下载适合你操作系统的二进制文件,并将其添加到系统的 PATH 中。

安装完成后操作

安装helm后,列出已安装的 Helm releases

helm list -A

注意!如果你没有使用 Helm 来部署 Kubernetes 应用程序,helm list -A 命令将不会显示任何内容

ad29a4a4f102a8b0bec7f5400d2d12a3## 使用国内 Helm 仓库镜像

在中国使用 Helm 时,最常见的做法是使用国内的 Helm 仓库镜像,以加快访问速度。可以添加国内的 Helm 镜像源,比如阿里云的 Helm 仓库。

阿里云 Helm 仓库

helm repo add aliyun https://apphub.aliyuncs.com

配置 HTTP/HTTPS 代理

配置系统的 HTTP/HTTPS 代理,Helm 会自动使用这些代理来访问网络。

在命令行环境中设置代理

export http_proxy=http://172.22.220.64:7096
export https_proxy=http://172.22.220.64:7096

Nginx 不同场景的 log format 示例

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

基本访问日志

用于常规的访问监控,记录关键的请求与响应信息。

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

性能分析日志

用于评估请求处理性能,重点关注响应时间。

log_format performance '$time_iso8601|$remote_addr|$request_time|$upstream_response_time|'
'$status|$request|$body_bytes_sent';

安全审计日志

记录与安全相关的额外信息,如 SSL/TLS 参数等。

log_format security '$time_iso8601|$remote_addr|$remote_user|$request|'
'$status|$body_bytes_sent|$http_referer|$http_user_agent|'
'$ssl_protocol|$ssl_cipher|$http_x_forwarded_for';

API 日志

针对 API 请求的专用日志格式,关注认证 token、payload 大小等内容。

log_format api '$time_iso8601|$remote_addr|$request_method|$uri|$server_protocol|'
'$status|$request_time|$http_x_api_token|$content_length';

调试日志

在排查故障时使用,记录尽可能详尽的信息。通常无需一直启用。

log_format debug '$time_iso8601|$remote_addr|$remote_user|$request|'
'$status|$body_bytes_sent|$http_referer|$http_user_agent|'
'$request_time|$upstream_response_time|$upstream_addr|'
'$ssl_protocol|$ssl_cipher|$http_x_forwarded_for|$host|$https';

在配置中使用日志

下面是一个在生产环境可用的完整示例

http {
log_format main '...';
log_format performance '...';
log_format security '...';
log_format api '...';
#log_format debug '...';

access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log warn;

server {
listen 80;
server_name example.com;

location /api {
access_log /var/log/nginx/api.log api;
# ...
}

location /debug {
access_log /var/log/nginx/debug.log debug;
# ...
}
}
}

开发日常使用

  log_format backend_log '$time_local|$remote_addr|$http_x_forwarded_for|$remote_user|'
'$request_method|$request_uri|$server_protocol|$http_host|'
'$status|$body_bytes_sent|$request_time|$upstream_response_time|'
'$upstream_addr|$upstream_status|$http_referer|$http_user_agent|'
'$request_id';

VSCode SSH开发免密登录

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

生成 SSH 密钥对

打开 Git Bash,然后输入以下命令生成一个新的 SSH 密钥对。如果你生成过了就不要再生了。

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

这里的your_email@example.com应替换为您的电子邮件地址,用作密钥的标签。按回车接受默认文件位置(通常是/c/Users/YourUsername/.ssh/id_rsa),在提示时可以选择输入密码或留空以创建无密码的密钥。

将公钥添加到 Linux 服务器

拷贝公钥内容

在 Git Bash 中,使用cat命令查看并复制您的公钥内容

cat ~/.ssh/id_rsa.pub

复制输出的所有内容(确保复制完整,包括ssh-rsa开头和邮箱结尾)。

登录到的 Linux 服务器 使用用户名和服务器地址登录

ssh -p 22 username@server-address

替换usernameserver-address为您的实际用户名和服务器地址。

编辑 authorized_keys 文件 在服务器上,将公钥内容添加到~/.ssh/authorized_keys文件中。如果文件不存在,可以创建它。

然后把你刚刚复制的内容粘贴进来,保存

nano ~/.ssh/authorized_keys

设置权限 设置正确的文件权限以确保安全

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

配置 VSCode 进行远程开发

41e4e8b9fab8cfb98ba360b830509447

VSCode内添加IdentityFile ~/.ssh/id_rsa。这可以进一步简化您的 SSH 连接命令

Host example
HostName example.com
User username
IdentityFile ~/.ssh/id_rsa

Cpolar安装与使用内网穿透工具推荐

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

conda 和 pip 的关系与区别

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

包管理

condapip 都是用于安装和管理 Python 包的工具,它们帮助用户轻松地在系统上添加或删除库。

互通性

在某些情况下,condapip 可以在同一个环境中共存。当某些包在 conda 中不可用时,可以使用 pip 进行安装,反之亦然。

主要区别

功能

conda 是一个开源的包和环境管理系统。它不仅能管理 Python 包,也能处理非 Python 包。此外,conda 能够创建和管理虚拟环境,这对于管理具有不同依赖的多个项目非常有用。

pip 是专门用于管理 Python 包的安装器。它不提供环境管理功能,也无法直接管理非 Python 包。

覆盖范围

conda 能管理包、依赖以及环境。

pip 主要关注于 Python 包的安装和管理。

包来源

conda 包通常来源于 Anaconda 仓库或其他 conda-specific 仓库。

pip 包来源于 Python Package Index (PyPI)。

依赖解析

conda 在处理依赖解析时通常更为可靠,能够更好地处理复杂的依赖关系和版本冲突。

pip 在处理复杂的依赖和版本冲突时可能不如 conda 强大。

平台支持

conda 支持多种平台,包括 Windows、macOS 和 Linux,并提供良好的二进制包支持,简化了在不同平台上的安装过程。

pip 也支持多个平台,但在处理二进制依赖和平台特定构建时可能不如 conda 方便。

环境管理

conda 提供强大的环境管理功能,允许用户创建独立的环境以隔离不同项目的依赖。

pip 本身不提供环境管理功能,但可以与 virtualenvvenv 等工具结合使用。

对于依赖纯 Python 的项目,pip 是一个可行的选择。然而,对于需要跨平台兼容性和涉及复杂依赖的项目,conda 可能是更好的选择