add kownledge ahout mechine learning2

This commit is contained in:
simple321vip
2026-08-25 22:44:19 +08:00
parent 909c458b07
commit 3aa2f9e4e3
12 changed files with 0 additions and 2283 deletions
+745
View File
@@ -0,0 +1,745 @@
# Kubernetes 最佳实践
> 来源:原 mongodb 集合 `t_blog` · 整理日期:2026-08-25
> 分类 ID:`2022050319356100000000000001` · 排序:4 · 文章数:8
## 目录
1. [Mongo Replica 集群搭建](#mongo-replica-集群搭建)
2. [kubernetes nfs](#kubernetes-nfs)
3. [Mongo Replica 集群搭建-1](#mongo-replica-集群搭建-1)
4. [kubernetes](#kubernetes)
5. [kubeadm](#kubeadm)
6. [kubernetes containerd](#kubernetes-containerd)
7. [新增加work节点](#新增加work节点)
8. [kubelet](#kubelet)
---
## 1. Mongo Replica 集群搭建
<sub>bid: `2023033021115000000000000029`</sub>
## Replica Set 集群搭建
本篇文章记录了基于mongodb-kubernetes-operator【Replica Set】模式集群搭建。
[1]()
[2](https://github.com/mongodb/mongodb-kubernetes-operator)
[3](https://github.com/mongodb/mongodb-kubernetes-operator/blob/master/docs/install-upgrade.md#install-the-operator-using-kubectl)
### 1. 事前准备
> kubernetes 版本: 1.23.9
> mongodb 版本:6.0.2
> nfs: 提前搭建好了kubernetes的nfs系统(具体搭建可以参照)。
### 2. github项目mongodb-kubernetes-operator
[项目地址](https://github.com/mongodb/mongodb-kubernetes-operator)
我们使用mongodb 官网推荐的 mongodb-kubernetes-operator 来进行集群安装。
[document](https://github.com/mongodb/mongodb-kubernetes-operator/blob/master/docs/install-upgrade.md#install-the-operator-using-kubectl)
我们事先把 mongodb-kubernetes-operator 项目中我们要使用的yaml文件复制到我们的工作目录 mongo, 需要的文件夹如下:
+ mongo
+ config/crd/bases/
+ config/rbac/
+ config/manager/
+ config/samples/mongodb.com_v1_mongodbcommunity_cr.yaml
+ deploy/clusterwide/
$ pwd
/usr/local/kubernetes/mongo
$ ls
config deploy
### 3. 按照document依次进行安装
#### 3.1 创建 mongodb 使用的namespace
kubectl create ns kube-mongo
#### 3.2 创建集群rbac 权限
# 修改 deploy/clusterwide/cluster_role_binding.yaml 中namespace 为 3.1 中我我们创建的 [kube-mongo]
kubectl apply -f deploy/clusterwide
kubectl apply -k config/rbac --namespace kube-mongo
#### 3.3 创建 crd
kubectl apply -f config/crd/bases/mongodbcommunity.mongodb.com_mongodbcommunity.yaml
#### 3.4 安装operator
kubectl create -f config/manager/manager.yaml --namespace kube-mongo
#### 3.5 安装mongodb
修改 config/samples/mongodb.com_v1_mongodbcommunity_cr.yaml文件
- 修改 MongoDBCommunity 资源
我们修改 metadata.name=violin-mongodb
我们修改 spec.version= "6.0.2"
我们修改 spec.users.name[0].passwordSecretRef.name= kube-mongo-pw
- 修改 Secret 资源
我们修改 metadata.name= kube-mongo-pw
我们修改 stringData.password= "任意随意写了吧"
然后进行安装
kubectl apply -f config/samples/mongodb.com_v1_mongodbcommunity_cr.yaml --namespace kube-mongo
#### 3.6 重新创建pvc
由于我使用的是自定义的storageclass,pvc 处于 pending状态,我们删除掉pvc
kubectl delete pvc data-volume-violin-mongodb-0 -n kube-mongo
kubectl delete pvc logs-volume-violin-mongodb-0 -n kube-mongo
我们创建新的pvc定义文件:
# pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data-volume-violin-mongodb-0
namespace: kube-mongo
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: managed-nfs-storage
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data-volume-violin-mongodb-1
namespace: kube-mongo
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: managed-nfs-storage
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data-volume-violin-mongodb-2
namespace: kube-mongo
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: managed-nfs-storage
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: logs-volume-violin-mongodb-0
namespace: kube-mongo
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: managed-nfs-storage
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: logs-volume-violin-mongodb-1
namespace: kube-mongo
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: managed-nfs-storage
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: logs-volume-violin-mongodb-2
namespace: kube-mongo
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: managed-nfs-storage
我们 创建 pvc
kubectl apply -f pvc.yaml
# 查看pvc 是否已
kubectl get pvc -n kube-mongo
kube-mongo data-volume-violin-mongodb-0 Bound pvc-1ac1a5fd-389c-496d-a47c-7df11d5f5a34 10Gi RWO managed-nfs-storage 41m
kube-mongo data-volume-violin-mongodb-1 Bound pvc-39008253-8702-4cc5-876a-0561850929bb 10Gi RWO managed-nfs-storage 61m
kube-mongo data-volume-violin-mongodb-2 Bound pvc-a7e867d3-b499-486a-9b39-a42ac5a00b43 10Gi RWO managed-nfs-storage 61m
kube-mongo logs-volume-violin-mongodb-0 Bound pvc-209ed46c-d558-4a09-8a2f-edfddbed610c 1Gi RWO managed-nfs-storage 41m
kube-mongo logs-volume-violin-mongodb-1 Bound pvc-664b307f-ab95-4af3-8851-17a3ecd2b57c 1Gi RWO managed-nfs-storage 61m
kube-mongo logs-volume-violin-mongodb-2 Bound pvc-a8f3a8d2-337d-4470-9ef4-5dbe18a4100a 1Gi RWO managed-nfs-storage 61m
### 4. 关于删除资源的问题。
我们创建operator 或者 statefuset 出错的时候,可以重新删除他们。
#### 4.1 删除 operator
kubectl delete deployments.apps mongodb-kubernetes-operator -n kube-mongo
#### 4.1 删除 statefulset
kubectl delete statefulsets.apps violin-mongodb -n kube-mongo
### 5. 关于 mongosh的使用
kubectl get secret <connection-string-secret-name> -n <my-namespace> -o json | jq -r '.data | with_entries(.value |= @base64d)'
kubectl get secret violin-mongodb-admin-my-user -n kube-mongo -o json | jq -r '.data | with_entries(.value |= @base64d)'
---
## 2. kubernetes nfs
<sub>bid: `2023040608509800000000000030`</sub>
## 1 概述
---
&emsp;&emsp;本篇文章记录了violin-home网站NFS系统搭建过程。
采用腾讯云的3台公网云轻量服务器(ubuntu系统)
> NFS服务需要开启 mountd,nfs,nlockmgr,portmapper,rquotad这5个服务.
&emsp;&emsp;其中
# 查看服务使用端口
# nfs : 2049
# portmapper: 111
# mountd, nlockmgr, rquotad 是随机的
# 所以事先要做好端口规划, 在轻量云服务器上开放对应的端口.
```bash
rpcinfo -p
```
## 2 nfs 服务器搭建
---
# install server
apt-get install nfs-kernel-server
# enable and start server
systemctl enable nfs-server
systemctl start nfs-server
# confirm nfs-server status
# create storage
mkdir -p /data/nfs-volume && chmod -R 777 /data/nfs-volume
# edit config file
cat > /etc/exports << EOF
/data/nfs-volume 49.233.4.79(rw,sync,no_root_squash) 43.138.55.43(rw,sync,no_root_squash) 43.138.73.106(rw,sync,no_root_squash)
EOF
# view nfs port usage
rpcinfo -p
# set port infomation for mountd、rquotad ser
# edit nfs-common status
vi /etc/default/nfs-common
STATDOPTS="--port 31000"
# edit nfs-kernel-server status
vi /etc/default/nfs-kernel-server
RPCMOUNTDOPTS="--manage-gids -p 31001"
# edit nlockmgr ,就算进行了这一步操作,也可能不生效。
vi /etc/modprobe.d/options.conf
options lockd nlm_udpport=31002 nlm_tcpport=31002
# to add locked
vi /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
lockd
vi /etc/sysctl.conf
fs.nfs.nlm_udpport=31002
fs.nfs.nlm_tcpport=31002
# enable sysctl.conf
/sbin/sysctl -p
# reload server and service
systemctl reload nfs-server
systemctl restart rpcbind.service
systemctl restart nfs.service
# view nfs port usage again
rpcinfo -p
# to confirm client ip
showmount -e 49.233.4.79
# Export list for 49.233.4.79:
# /data/nfs-volume 43.138.73.106,43.138.55.43,49.233.4.79
## 3 nfs 客户端搭建
---
&emsp;&emsp;下面操作需要在每台node上操作,包括master节点。
# install client
apt-get install nfs-common
# create mount path for client(we use different path to server)
mkdir /opt/nfs-volume
# mount
mount -t nfs 49.233.4.79:/data/nfs-volume /opt/nfs-volume
df -h | tail -1
# config auto mount for client
cat >> /etc/fstab << EOF
49.233.4.79:/data/nfs-volume /opt/nfs-volume defaults,_netdev 0 0
EOF
## 4
---
## 3. Mongo Replica 集群搭建-1
<sub>bid: `2023040623407900000000000031`</sub>
## Replica Set 集群搭建
本篇文章记录了基于 helm bitnami/mongodb chat的【Replica Set】模式集群搭建。
[参照文档](https://github.com/bitnami/charts/tree/main/bitnami/mongodb)
### 1. 事前准备
> kubernetes 版本: 1.23.9
> mongodb 版本:6.0.2
> nfs: 提前搭建好了kubernetes的nfs系统(具体搭建可以参照)。
> storageclass: 提前准备好了基于nfs的storageclass。
> helm: 已经安装了helm
### 2. 添加bitnami repo
helm repo add bitnami https://charts.bitnami.com/bitnami
### 3. 查询 mongodb 相关资源
helm repo update
helm search repo mongodb
NAME CHART VERSION APP VERSION DESCRIPTION
bitnami/mongodb 13.9.4 6.0.5 MongoDB(R) is a relational open source NoSQL da...
bitnami/mongodb-sharded 6.3.3 6.0.5 MongoDB(R) is an open source NoSQL database tha...
### 4. 创建helm 配置文件
## values.yaml
global:
namespaceOverride: kube-mongo
storageClass: "managed-nfs-storage"
nameOverride: violin-mongo
image:
pullPolicy: IfNotPresent
architecture: "replicaset"
replicaCount: 3
#auth:
# rootUser: "root"
# rootPassword: "123654"
# usernames:
# - "guan"
# passwords:
# - "83201048"
# databases:
# - "violin"
resources:
requests:
cpu: "0.2"
memory: 200M
limits:
cpu: "0.3"
memory: 300M
containerPorts:
mongodb: 27017
externalAccess:
enabled: true
service:
externalTrafficPolicy: "Cluster"
type: "ClusterIP"
persistence:
enabled: true
size: 5Gi
### 5. 安装 mongodb
helm install mongodb bitnami/mongodb -f values.yaml
NAME: mongodb
LAST DEPLOYED: Fri Apr 7 11:49:07 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: mongodb
CHART VERSION: 13.9.4
APP VERSION: 6.0.5
** Please be patient while the chart is being deployed **
MongoDB&reg; can be accessed on the following DNS name(s) and ports from within your cluster:
mongodb-violin-mongo-0.mongodb-violin-mongo-headless.kube-mongo.svc.cluster.local:27017
mongodb-violin-mongo-1.mongodb-violin-mongo-headless.kube-mongo.svc.cluster.local:27017
mongodb-violin-mongo-2.mongodb-violin-mongo-headless.kube-mongo.svc.cluster.local:27017
To get the root password run:
export MONGODB_ROOT_PASSWORD=$(kubectl get secret --namespace kube-mongo mongodb-violin-mongo -o jsonpath="{.data.mongodb-root-password}" | base64 -d)
To get the password for "guan" run:
export MONGODB_PASSWORD=$(kubectl get secret --namespace kube-mongo mongodb-violin-mongo -o jsonpath="{.data.mongodb-passwords}" | base64 -d | awk -F',' '{print $1}')
To connect to your database, create a MongoDB&reg; client container:
kubectl run --namespace kube-mongo mongodb-violin-mongo-client --rm --tty -i --restart='Never' --env="MONGODB_ROOT_PASSWORD=$MONGODB_ROOT_PASSWORD" --image docker.io/bitnami/mongodb:6.0.5-debian-11-r4 --command -- bash
Then, run the following command:
mongosh admin --host "mongodb-violin-mongo-0.mongodb-violin-mongo-headless.kube-mongo.svc.cluster.local:27017,mongodb-violin-mongo-1.mongodb-violin-mongo-headless.kube-mongo.svc.cluster.local:27017,mongodb-violin-mongo-2.mongodb-violin-mongo-headless.kube-mongo.svc.cluster.local:27017" --authenticationDatabase admin -u root -p $MONGODB_ROOT_PASSWORD
To connect to your database nodes from outside, you need to add both primary and secondary nodes hostnames/IPs to your Mongo client. To obtain them, follow the instructions below:
### 6. connect
db.createUser({user: "root", pwd: "123654", roles: ["root"]})
---
## 4. kubernetes
<sub>bid: `2023040717276500000000000032`</sub>
## kubernetes 1.25.2 base Containerd
### 1. deploy schedule
NAME | IP | ROLES | VERSION | OS
k8s-master | 192.168.8.30 | master | 1.25.2 | ubuntu 22.04
k8s-node1 | 192.168.8.31 | worker | 1.25.2 | ubuntu 22.04
k8s-node2 | 192.168.8.32 | worker | 1.25.2 | ubuntu 22.04
### 2. preparation
#### 2.1 安装系统工具
```bash
apt-get update && apt-get install -y apt-transport-https
```
#### 2.2 安装 GPG 证书
```bash
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
```
#### 2.3 写入软件源
```bash
cat << EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
```
#### 2.4 vi hostname
```bash
vi /etc/hostname
vi /etc/hosts
reboot
```
#### 2.5 selinux
```bash
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
```
#### 2.6 禁用交换分区
```bash
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
```
#### 2.7 iptables
```bash
echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 > /proc/sys/net/ipv4/ip_forward
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
sudo sysctl --system
```
#### 2.8
### 3 install kubectl kubelet kebeadm
#### 3.1 install
```bash
apt-get install -y kubelet=1.25.2-00 kubeadm=1.25.2-00 kubectl=1.25.2-00
```
### 4 Containerd
#### 4.1 install Containerd
```bash
apt-get install containerd.io
```
#### 4.2 generate config file
```bash
containerd config default | sudo tee /etc/containerd/config.toml
```
#### 4.3 edit config.toml
```bash
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.6"
SystemdCgroup = true
```
#### 4.4 restart
```bash
systemctl restart containerd && systemctl enable containerd
crictl version
```
#### 4.5 edit crictl.yaml
```bash
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
```
#### 4.6 confirm crictl
```bash
crictl images
```
### 5 kubeadm
#### 5.1 kubeadm init
```bash
kubeadm init --kubernetes-version=1.25.2 \
--apiserver-advertise-address=192.168.8.30 \
--apiserver-bind-port=6443 \
--image-repository=registry.aliyuncs.com/google_containers \
--service-cidr=10.96.0.0/12 \
--cri-socket unix:///var/run/containerd/containerd.sock \
--ignore-preflight-errors=Swap \
--control-plane-endpoint=k8s-master \
--upload-certs
```
```
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
You can now join any number of the control-plane node running the following command on each as root:
kubeadm join k8s-master:6443 --token 81jkv9.2n555fci6m6i9afx \
--discovery-token-ca-cert-hash sha256:9ffe6e7ed7cf4ad6eb0e0dbb5b6f3bae1cac6989c3870653c83fe424715b4008 \
--control-plane --certificate-key c16ea4431de14998ccb28282b5e6215ab03c9ba94287903c6a8482add718034a
Please note that the certificate-key gives access to cluster sensitive data, keep it secret!
As a safeguard, uploaded-certs will be deleted in two hours; If necessary, you can use
"kubeadm init phase upload-certs --upload-certs" to reload certs afterward.
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join k8s-master:6443 --token 81jkv9.2n555fci6m6i9afx \
--discovery-token-ca-cert-hash sha256:9ffe6e7ed7cf4ad6eb0e0dbb5b6f3bae1cac6989c3870653c83fe424715b4008
```
#### 5.2 kubeconfig
```bash
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
```
#### 5.3 kubectl
```bash
kubectl get noe
```
```
NAME STATUS ROLES AGE VERSION
k8s-master NotReady control-plane 135m v1.25.2
```
---
## 5. kubeadm
<sub>bid: `2023041008541300000000000036`</sub>
## 1. xxx
22.04.1-Ubuntu
```bash
cat << EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/kubernetes-xenial main
EOF
```
```bash
apt-get update
apt-get install -y kubelet=1.25.2-00 kubeadm=1.25.2-00 kubectl=1.25.2-00
```
```bash
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
```
临时关闭swap分区,当前会话生效,重启失效
永久关闭swap分区
```bash
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
```
```bash
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
sudo sysctl --system
```
```bash
echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 > /proc/sys/net/ipv4/ip_forward
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
```
```bash
cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
BOOTPROTO=static
DEVICE=eth0
IPADDR=172.16.0.11
PREFIX=32
TYPE=Ethernet
USERCTL=no
ONBOOT=yes
EOF
```
vi /etc/hosts
```bash
echo "######## edit /etc/hosts ########"
echo "" >> /etc/hosts
echo 192.168.8.30 k8s-master >> /etc/hosts
echo 192.168.8.31 k8s-node1 >> /etc/hosts
echo 192.168.8.32 k8s-node2 >> /etc/hosts
```
## about docker and cri-dockerd
```bash
docker pull golang:1.20.2
```
download cri-dockerd
```bash
echo "######### https://github.com/Mirantis/cri-dockerd/releases/tag/v0.3.2 ########'
tar -zxvf cri-dockerd-0.3.2.tar.gz
```
```bash
echo "######## chuangjian guazai dian ########"
mkdir /data
cd /data
mkdir go
cd go
echo "######## download cri-dockerd ########"
echo "######## https://github.com/Mirantis/cri-dockerd/releases/tag/v0.3.2 ########'
echo "######## jieya ########"
tar -zxvf cri-dockerd-0.3.2.tar.gz
echo "######## yunxing golang container ########"
docker run -it -v /data/go:/data/go golang:1.20.2 /bin/sh
```
enter container
```bash
cd /data/go/cri-dockerd-0.3.2
mkdir bin
go build -o bin/cri-dockerd
```
out container
```bash
cd /data/go/cri-dockerd-0.3.2
install -o root -g root -m 0755 bin/cri-dockerd /usr/local/bin/cri-dockerd
cp -a packaging/systemd/* /etc/systemd/system
sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' /etc/systemd/system/cri-docker.service
systemctl daemon-reload
systemctl enable cri-docker.service
systemctl enable --now cri-docker.socket
```
---
## 6. kubernetes containerd
<sub>bid: `2023041415557100000000000037`</sub>
## containerd
## ctr
## crictl
## nerdctl
##
---
## 7. 新增加work节点
<sub>bid: `2023061019139700000000000038`</sub>
##
---
## 8. kubelet
<sub>bid: `2024042923524000000000000040`</sub>
该写点什么么...
---
+12
View File
@@ -0,0 +1,12 @@
##
Q. failed to make file target manager: too many open files.
A. Promtail 的 file target manager 会为每个匹配的日志路径(或每个 scrape job)创建一个独立的 inotify 实例来监听文件变化。当你的 Promtail 配置了多个 scrape_configs、或者通配符匹配了大量目录时,很容易瞬间创建超过 128 个 inotify 实例,直接触发 too many open files 报错并停止采集。
同时也应用于 drone runner,之前找不到原因大概率也是这个原因现在已经不出现了。
解决方案为
# 临时生效(立即验证)
sysctl -w fs.inotify.max_user_instances=1024
# 持久化(重启不丢失)
echo 'fs.inotify.max_user_instances=1024' >> /etc/sysctl.conf
sysctl -p
File diff suppressed because it is too large Load Diff