跳到主要内容

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

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

查看所有标签

npm 配置本地代理

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

使用命令设置代理

你可以使用npm config set命令来设置 HTTP 和 HTTPS 代理。这会将代理设置保存在全局 NPM 配置文件中(通常位于用户主目录的.npmrc文件中)。

打开终端或命令行界面,输入以下命令

npm config set proxy http://127.0.0.1:7890
npm config set https-proxy http://127.0.0.1:7890

这里假设你的代理服务器地址是http://127.0.0.1:7890,你需要根据你的实际代理服务器地址进行替换。

直接编辑.npmrc 文件设置代理

你还可以手动编辑或创建一个.npmrc文件来指定代理设置。.npmrc文件通常位于用户的主目录下。

打开或创建.npmrc文件。

添加以下行来设置代理

proxy=http://127.0.0.1:7890
https-proxy=http://127.0.0.1:7890

保存并关闭文件。

清除代理设置

如果你想清除已设置的代理,可以使用以下命令

npm config delete proxy
npm config delete https-proxy

验证代理设置

设置完代理后,你可以使用以下命令来检查设置是否正确

npm config get proxy
npm config get https-proxy

这将显示当前设置的 HTTP 和 HTTPS 代理地址。

Linux Tig 使用指南

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

安装 Tig

Tig 可以在大多数 Linux 发行版以及 macOS 上通过包管理器安装。以下是一些常见系统的安装方法

Ubuntu/Debian

sudo apt-get install tig

Fedora

sudo dnf install tig

macOS (使用 Homebrew)

brew install tig

安装完成后,你可以通过在任何 Git 仓库目录下运行 tig 命令来启动它。

基础使用

启动 Tig 后,默认视图是当前仓库的提交历史。你将看到每个提交的哈希值、作者、日期和提交消息。

导航

  • 使用上下箭头键 来在提交列表中上下移动。
  • Enter 查看选中提交的详细变更内容。

5f6a785f75957b182f2745bef1fec41c

查看分支和标签

  • 运行 tig refs 显示所有的分支和标签。
  • 选中任一分支或标签并按 Enter 可查看该引用的提交历史。

3a5c7daead43c329b5c20c5171823cf9bc1b24cae705949d473f3c22650e73a9

查看特定文件的历史

  • 运行 tig <文件路径> 可查看指定文件的提交历史。

00aa280b7ad066d24c81622b06b36858

状态视图

  • 运行 tig status 可查看当前仓库的状态,类似于运行 git status

d6bc0d609b111cf56477ac04575ca4e0## 进阶操作

搜索

  • 在任何视图中按 / 键启动搜索模式,输入搜索关键词后按 Enter
  • 使用 n 查找下一个匹配项,使用 N 查找上一个匹配项。

99fff1dc0919c319943f75faf1c301b0

查看两个提交之间的差异

  • 在历史视图中,选中一个提交后按 D 键,然后选择第二个提交并按 Enter

8716de97d7fc5810d4f5ea9b0610ec56

过滤提交

按 `` 键进入命令模式,然后可以输入类似于 Git 命令的过滤器,例如 tig @ -- README.md 查看涉及 README.md 文件的提交。

自定义配置

你可以通过修改 ~/.tigrc 文件来自定义 Tig 的行为和样式。例如,添加自定义颜色或改变键绑定。

# 设置颜色
set main-author-color yellow
set main-date-color green

# 更改键绑定
bind main h select

Kubernetes 面试常见问题

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

Kubernetes 中的 apiVersion 是什么意思?

在 Kubernetes 中,apiVersion 指定了创建资源时要使用的 Kubernetes API 版本。由于 Kubernetes API 会随时间发展而演进,新的功能和改进被添加到不同的 API 版本中。apiVersion 告诉 Kubernetes 集群如何处理这些资源的特定版本。常见的 apiVersion 包括 v1apps/v1batch/v1 等,不同的资源和功能需要指定适当的 API 版本。需要注意的是,随着 Kubernetes 的发展,有些 API 可能会被废弃,所以在创建资源时,要确保使用的是当前支持的、稳定的 API 版本。

Kubernetes 中 Service、Deployment 和 Pod 的基本概念

Pod 是 Kubernetes 中的最小和最基本的部署单位,而不是单个容器。每个 Pod 封装了一个或多个容器,这些容器共享存储和网络资源,并运行在同一使用环境下。每个 Pod 分配一个独特的 IP 地址,同一 Pod 内的容器间可以通过 localhost 进行通信。此外,Pod 还可以定义 Init Container,用于在应用容器启动前执行一些初始化任务。

Deployment 提供了一种声明式的更新机制,管理 Pod 和 ReplicaSet(确保指定数量的 Pod 副本始终可用)。它允许你定义应用的预期状态,Deployment 控制器在后台自动工作以确保当前状态匹配预期状态,包括处理更新、回滚和扩展操作。例如,Deployment 可以指定 RollingUpdate 策略,逐步替换旧的 Pod,实现平滑的应用更新。如果更新出现问题,Deployment 还可以方便地回滚到之前的版本。

Service 是定义一组 Pod 的访问规则的抽象方式,允许通过一个稳定的地址访问这些 Pod。Service 提供了负载均衡和服务发现,使得客户端无需了解后端 Pod 的具体位置。除了常见的 ClusterIP、NodePort 和 LoadBalancer 类型,Service 还有一种特殊的类型叫 Headless Service,它不提供负载均衡,而是让客户端直接连接到 Pod。这在某些有状态应用如 StatefulSet 中非常有用。

Service 的类型有哪几种?有什么区别?用在什么场景?

ClusterIP 默认类型,为 Service 分配一个内部的 IP 地址,使 Service 只能在集群内部访问,适用于内部通信。

NodePort 在 ClusterIP 的基础上,NodePort 服务通过每个节点的一个静态端口向外暴露服务,使得可以从集群外部通过 <NodeIP><NodePort> 访问 Service。适用于需要外部访问的开发和测试环境。

LoadBalancer 在 NodePort 的基础上,LoadBalancer 类型通过云服务提供商的负载均衡器自动分配一个外部 IP 地址,使得 Service 可以通过外部 IP 访问。适用于需要大规模外部访问的生产环境。

ExternalName ExternalName 服务通过返回一个指定的域名而不是 IP 地址,可以作为内部服务对外部服务的引用。适用于需要访问外部服务但希望通过内部 DNS 管理的场景。

什么是 Ingress?Ingress 和 Ingress Controller 是什么关系?

Ingress 是一个管理访问集群服务的规则集合,支持通过 HTTP 和 HTTPS 将外部请求路由到集群中的多个服务。Ingress 可以定义负载均衡到不同的 Service、TLS 终止(就是前面还是 HTTPS,后面集群内部使用 HTTP)和基于名称的虚拟主机。例如,可以通过 Ingress 配置 "https://zhuanlan.zhihu.com/p/715969584/www.mycompany.com/service1" 路由到 service1,"https://zhuanlan.zhihu.com/p/715969584/www.mycompany.com/service2" 路由到 service2。

Ingress Controller 是一种守护进程,负责实施 Ingress 中定义的规则,处理进入集群的请求。Ingress 仅是规则的声明,而 Ingress Controller 是实施这些规则的实体。常见的 Ingress Controller 包括 Nginx Ingress Controller 和 Traefik。例如,Nginx Ingress Controller 可以根据 Ingress 规则自动配置 Nginx 服务器,实现基于域名的路由。

PersistentVolume 和 PersistentVolumeClaim 是什么关系?为什么要有这两个?

PersistentVolume (PV) 是集群级别的存储资源,可以由管理员预先配置,也可以由存储供应商根据 PVC 的请求动态创建。PV 提供给集群使用的一块存储空间。

PersistentVolumeClaim (PVC) 是用户对存储资源的请求,通过 PVC,用户可以请求特定大小和存储特性的 PV。

两者的关系使得存储资源的管理更为动态和灵活,PV 是资源的提供方,而 PVC 是资源的消费方。这种模式解耦了存储的配置与使用,提高了资源的利用率和灵活性。此外,StorageClass 可以定义 PV 的属性模板,让 PVC 动态绑定 PV,进一步简化存储管理。

PV 和 PVC 的 AccessMode 有哪些取值?分别是什么含义?

ReadWriteOnce (RWO)

PV 只能被单个节点以读写方式挂载。

适用场景

  • 单个 Pod 需要读写访问存储,如单实例数据库。
  • 有状态的应用程序,如 GitLab、Jenkins 等,它们通常只需要单个实例来读写数据。

例如:MySQL 或 PostgreSQL 数据库,键值存储,如 Redis 或 Memcached

ReadOnlyMany (ROX)

PV 可以被多个节点同时以只读方式挂载。

适用场景

  • 多个 Pod 需要同时读取相同的数据,如静态网站、共享配置等。
  • 分布式应用程序,它们的实例需要共享只读数据。

例如:前端应用程序的静态资源,后端应用程序的配置文件

ReadWriteMany (RWX)

PV 可以被多个节点同时以读写方式挂载。

适用场景

  • 多个 Pod 需要同时读写相同的数据,如多实例数据库、共享文件存储等。
  • 分布式应用程序,它们的实例需要共享读写数据。

例如:共享媒体库或用户上传文件,分布式数据处理,使用支持 RWX 的分布式文件系统,如 GlusterFS、Ceph FS 等

注:以上问题仅针对研发岗,运维岗需要更深入了解

Kubernetes 常用命令及其缩写形式

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

主要资源类型及其 kubectl 命令的缩写

常用命令缩写形式说明
podspo管理 Pods
servicessvc管理服务
deploymentsdeploy管理部署
replicasetsrs管理 ReplicaSets
namespacesns管理命名空间
ingressesing管理 Ingress
configmapscm管理配置映射
secretssecret管理敏感信息
serviceaccountssa管理服务账号
persistentvolumeclaimspvc管理持久卷声明
persistentvolumespv管理持久卷

补充

以下是一些可能也需要了解的 Kubernetes 资源类型,虽然它们的使用频率可能没有上表中的那么高

常用命令缩写形式说明
eventsev查看事件
nodesno管理集群节点
clusterrolescr管理集群级角色
clusterrolebindingscrb管理集群级角色绑定
rolesro管理命名空间级角色
rolebindingsrb管理命名空间级角色绑定

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

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

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。

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