V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  hejw19970413  ›  全部回复第 1 页 / 共 9 页
回复总数  173
1  2  3  4  5  6  7  8  9  
6 天前
回复了 coverme7 创建的主题 生活 大家会让另一半看你手机吗?
随便看,主要是懒的看。
12 天前
回复了 sakurawzt 创建的主题 Kubernetes 求份搭建高可用 k8s 的教程
自己玩可以如果企业搭建先建 ETCD ,家里玩尽量用 Debian ,Ubuntu 等用的比较多的,别弄国产
要先弄 Keeplived + HA

*前提:*

```
1. 选择官方推荐版本并且不要选择最新版的
2. 国内存在着镜像拉取问题
3. 如果服务没起来需要看一下 containerd 服务
```

*准备工作:*

```
1. 确定机器的信息,操作系统,CPU 架构
1. 操作系统
2. CPU 架构
2. 时区设置
1. 配置系统时区: timedatectl set-timezone Asia/Shanghai
2. 设置本地 RTC 为 0: timedatectl set-local-rtc 0
3. 验证时区设置: timedatectl show --property=Timezone
4. 验证 RTC 设置: timedatectl show --property=RTC
3. 加载内核模块
*需要加载['br_netfilter', 'overlay']*
1. 查看/etc/modules-load.d,目录是否存在内核模块文件: ls /etc/modules-load.d/ | grep "k8s.conf"
2. 如果不存在
1. 创建模块加载配置文件: vi k8s.conf
2. 写入模块加载文件:tee >

<<EOF br_netfilter \n overlay \n EOF
3. 临时加载模块: modprobe overlay br_netfilter
4. 加载模块:

5. 验证模块是否成功加载

4. 关闭防火墙
1. 常用的防火墙: ['firewalld', 'ufw', 'iptables']
2. 检查服务是否运行: systemctl is-active <service-name>
3. 禁用防火墙服务
1. 停止服务: systemctl stop <service-name>
2. 禁止开机自启: systemctl disable <serivce-name>
4. 额外操作:
firewalld: firewall-cmd --state && firewall-cmd --permanent --shutdown
ufw: ufw disable
iptables: iptables -F && iptables -X && iptables -t nat -F && iptables -t nat -X && iptables -t mangle -F && iptables -t manage -X
5. 交换分区
1. 检查交换分区: free -h && swapon --show
2. 临时关闭交换分区: swapoff -a
3. 永久关闭交换分区
1. 注释掉

文件中关于 swap 的配置:

6. 修改内核参数:
1. net.bridge.bridge-nf-call-ip6tables = 1
2. net.bridge.bridge-nf-call-iptables = 1
3. net.ipv4.ip_forward = 1
```

*部署组件:*

````
Dokcer [https://download.docker.com/linux/static/stable/]( https://download.docker.com/linux/static/stable/?_gl=1*1w17yhs*_ga*OTg3MzYwNS4xNzQzOTA0MTQ2*_ga_XJWPQMJYHQ*MTc0NDYwMDEwMC4zLjEuMTc0NDYwMDExNi40NC4wLjA.)

```
export KUBE_VERSION=<version>
export ARCH=<arch>
export KUBEADM_URL=https://dl.k8s.io/release/<KUBE_VERSION>/bin/linux/<ARCH>/kubeadm
export KUBECTL_URL=https://dl.k8s.io/release/<KUBE_VERSION>/bin/linux/<ARCH>/kubectl
export KUBELET_URL=https://dl.k8s.io/release/<KUBE_VERSION>/bin/linux/<ARCH>/kubelet
```

1. 安装 Docker:
1. 下载安装包: curl -OL <docker_url>
2. 解压安装包: tar -xf <tar_name> && sudo mv docker/* /usr/local/bin/
2. 安装 kubeadm,kubectl,kubelet:
1. 下载二进制: curl -OL $(echo $KUBEADM_URL) && curl -OL $(echo $KUBECTL_URL) && curl -OL $(echo $KUBECTL_URL)
2. 移动文件位置: chmod +x kubeadm kubectl kubelet && sudo mv kubeadm kubectl kubelet /usr/local/bin/
3. 创建 containerd.service:
1. 创建 containerd 配置文件:

2. 创建 containerd 服务文件:

```
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target
Wants=network.target

[Service]
Type=notify
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/containerd
TimeoutStartSec=0
RestartSec=10
Restart=always
Delegate=yes
KillMode=process
OOMScoreAdjust=-999
LimitNOFILE=1048576
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Environment="CGROUP_DRIVER=systemd"

[Install]
WantedBy=multi-user.target
```
4. 创建 docker.service:
1. 创建 docker 服务文件: /etc/systemd/system/docker.service
```
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
BindsTo=containerd.service
After=network-online.target containerd.service
Wants=network-online.target

[Service]
Type=notify
ExecStart=/usr/local/bin/dockerd --containerd=/run/containerd/containerd.sock
Restart=always
RestartSec=5
TimeoutStartSec=0
Delegate=yes
KillMode=process
OOMScoreAdjust=-999
LimitNOFILE=1048576
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
EnvironmentFile=-/etc/docker/daemon.json

[Install]
WantedBy=multi-user.target
```
5. 创建 kubeadm-kubelet 配置:
1. 创建 kubeadm-kubelet: /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
```
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=

/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
EnvironmentFile=-/etc/sysconfig/kubelet
ExecStart=
ExecStart=/usr/local/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
```
6. 创建 kubelet.service:
*非必须*
1.创建 kubelet 服务文件: /etc/systemd/system/kubelet.service
```
[Unit]
Description=kubelet: The Kubernetes Node Agent
Documentation=https://kubernetes.io/docs/home/
Wants=network-online.target
After=network-online.target

[Service]
ExecStart=/usr/local/bin/kubelet
Restart=always
StartLimitInterval=0
RestartSec=10

[Install]
WantedBy=multi-user.target
```
7. 启动服务
1. 重载 systemd 配置: systemctl daemon-reload
2. 组件加入开机自启:
1. containerd: systemctl enable --now containerd.service
2. docker: systemctl enable --now docker.service
3. kubelet: systemctl enable --now kubelet.service
````

*部署 k8s*

````
```bash
#!/bin/bash
# 这里因为环境的不同的只提供一个基础的模版
# <*> 需要按环境替换
# <cri_socket> 默认地址: unix:///run/containerd/containerd.sock
# <controlPlaneEndpoint> 部署多 master 需要这个控制平台地址不能为空
# <san> apiservice 通过证书 san 校验,被请求的地址是否在证书内
# <serviceSubnet> k8s 服务网络段
# <podSubnet> k8s Pod 网络段
# <etcd_data_dir> etcd 存储的地址
# 具体的配置可以仔细阅读 https://kubernetes.io/zh-cn/docs/reference/setup-tools/kubeadm

tee kubeadm-init.conf << EOF
apiVersion: kubeadm.k8s.io/v1beta4
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: <bootstrapTokens_token>
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: <localAPIEndpoint>
bindPort: <bind_port>
nodeRegistration:
criSocket: <cri_socket>
imagePullPolicy: IfNotPresent
imagePullSerial: true
timeouts:
controlPlaneComponentHealthCheck: 4m0s
discovery: 5m0s
etcdAPICall: 2m0s
kubeletHealthCheck: 4m0s
kubernetesAPICall: 1m0s
tlsBootstrap: 5m0s
upgradeManifests: 5m0s
---
apiVersion: kubeadm.k8s.io/v1beta4
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
apiServer:
certSANs:
- <san>
controlPlaneEndpoint: <controlPlaneEndpoint>
controllerManager: {}
dns: {}
encryptionAlgorithm: RSA-2048
etcd:
local:
dataDir: <etcd_data_dir>
imageRepository: registry.k8s.io
kind: ClusterConfiguration
kubernetesVersion: 1.32.3
networking:
dnsDomain: cluster.local
serviceSubnet: <serviceSubnet>
podSubnet: <podSubnet>
proxy: {}
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "iptables"
EOF

# 启动 k8s
kubeadm init --config kubeadm-init.conf
```

# 后续: 可以根据需要部署 CNI,CSI

# CNI:
# export calico_version=v3.27.4
# calico : https://raw.githubusercontent.com/projectcalico/calico/$calico_version/manifests/calico.yaml

# CSI: NFS 这个很简单!,CEPH 部署麻烦些
````

*额外的说明*

```
*k8s 加入节点*
1. 如果初始化的没有配置 controlPlaneEndpoint ,现在需要加 master 节点
1. 配置控制平面地址: kubeadm init --control-plane-endpoint <control-plane-endpoint> --upload-certs
2. 加入 control_plane
1. 创建新的令牌: kubeadm token create --print-join-command --certificate-key $(kubeadm init phase upload-certs --upload-certs | tail -n 1)
3. 加入 worker
1. 创建新的令牌: kubeadm token create --print-join-command

*k8s 镜像*
1. 查看镜像:kubeadm config images list
```
升级不如重写,重写不如不写
Thinkpad 在 Linux 节能和待机上,有少许问题。其他都 OK
49 天前
回复了 samkallon 创建的主题 生活 要不要卖房
1. 股市有风险,投资需谨慎
2. 有孩子的情况下,需要考虑户口上学

如果你认为房子是用来住的,就不要考虑价格问题

可以这么想,你现在的房子就是租的,每年跌的钱就是租房的钱。这样考虑心里会不会好受点。

最最最重要是家庭和谐。
49 天前
回复了 breadykidliu 创建的主题 问与答 关于退休后有一个大胆的猜测
我今天思考了一下,预估计我退休大概得 70 多,97 年人。
82 天前
回复了 zhangyou1010 创建的主题 Linux 公司最近要买国产 CPU 服务器,求推荐
ky10.aarch64
Kunpeng-920
公司选的
350 天前
回复了 dreamdragon 创建的主题 程序员 ceph 生产环境搭建和配置推荐
不会就默认!
350 天前
回复了 hejw19970413 创建的主题 程序员 请教一下 Mybatis Mapper SQL
@lpe234 这两个项目我试过了,解析不出来
351 天前
回复了 hejw19970413 创建的主题 程序员 请教一下 Mybatis Mapper SQL
其实我是想直接把 SQL 给弄出来,不想去执行,因为还有一个要求是写个文档,领导要看,我要是执行的来说,里面有好多的判断啥的,得处理好多得查询条件。
@wymisgod
@liuzhedash
@qq135449773
@eephee 那你这种服务变动还好,不是很大,如果不频繁重启 pod 的情况下,对现有的架构不做重大的调整,那就 watch 动态变更 nginx 。还有一种方式不知道你可以不,就是根据具体需求建立不同的 service ,然后 watch pod, 不要自动的添加 endpoint 中 IP ,而是要手动更新 endpoint IP ,这样你不用频繁重启 nginx,因为 nginx 中的地址都是 service ip, 通过 service IP 就能动态找到 POD IP 了。这种情况就是针对你这种很少的服务可以,因为无论多少都是固定的。
如果你是单个服务一对一的配置 nginx 的推荐你用 watch 去重启 nginx ,如果是一对多的情况下不建议这么干,因为 nginx 频繁重启会有问题。目前对于 k8s 来说最好的代理是 envoy ,支持动态配置,只不过就是对接起来有点困难,但是简单的用是可以的。
357 天前
回复了 bli22ard 创建的主题 程序员 rust vs golang 交叉编译
我这几天搞 CGO 的静态编译同样的遇到 C 库不兼容或者 GCC 编译问题。最后是用 chroot 搞定的,也是比较蛋疼
thinkpad T14
少量多次查询,可以根据发生的查询时间进行少量多次的查询,第一次查询可能是近一周的,根据模糊查询的词的长短来控制查询时间段,关键词越少可能量就会很多,那么就缩短查询的时间间隔。最不理想的情况是数据的全部查询。核心还是前面所说的数据剪枝,根据当前的场景进行条件的增加。
2024-10-29 15:38:45 +08:00
回复了 isSamle 创建的主题 程序员 有啥好用的 Nginx 管理 UI 吗
traefik 可以试着用一下
2024-10-28 16:42:16 +08:00
回复了 hejw19970413 创建的主题 程序员 请教一下 oracle 协议解析
@realpg 不知道,安排的任务
2024-10-23 17:18:45 +08:00
回复了 hejw19970413 创建的主题 程序员 请教一下 oracle 协议解析
@julyclyde 成熟的产品是谁家的
@yadihaoku 可以申请公网 IP
1  2  3  4  5  6  7  8  9  
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2934 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 32ms · UTC 13:14 · PVG 21:14 · LAX 05:14 · JFK 08:14
♥ Do have faith in what you're doing.