K8s初識

来源:https://www.cnblogs.com/1naonao/archive/2020/03/08/12443911.html
-Advertisement-
Play Games

k8s系統架構 從系統架構來看,k8s分為2個節點 Master 控制節點 指揮官 Node 工作節點 幹活的 1.Master節點組成 API Server :提供k8s API介面 主要處理Rest操作以及更新Etcd中的對象 是所有資源增刪改查的唯一入口。 Scheduler:資源調度器 根據 ...


k8s系統架構

從系統架構來看,k8s分為2個節點
Master 控制節點 指揮官
Node 工作節點 幹活的

1.Master節點組成

API Server :提供k8s API介面
主要處理Rest操作以及更新Etcd中的對象
是所有資源增刪改查的唯一入口。

Scheduler:資源調度器
根據etcd里的節點資源狀態決定將Pod綁定到哪個Node上

Controller Manager
負責保障pod的健康存在
資源對象的自動化控制中心,Kubernetes集群有很多控制器。

Etcd
這個是Kubernetes集群的資料庫
所有持久化的狀態信息存儲在Etcd中

master節點組成

API相當於命令,溝通API server

2.Node節點的組成

Docker Engine
負責節點容器的管理工作,最終創建出來的是一個Docker容器。

kubelet
安裝在Node上的代理服務,用來管理Pods以及容器/鏡像/Volume等,實現對集群對節點的管理。

kube-proxy
安裝在Node上的網路代理服務,提供網路代理以及負載均衡,實現與Service通訊。

node節點組成

k8s邏輯架構

從邏輯架構上看,k8s分為
Pod 
Controller 
Service   

1.POD 
  POD是k8s的最小單位
  POD的IP地址是隨機的,刪除POD會改變IP
  POD都有一個根容器
  一個POD內可以由一個或多個容器組成
  一個POD內的容器共用根容器的網路命名空間
  一個POD的內的網路地址由根容器提供

2.Controller
  用來管理POD
  控制器的種類有很多

- RC Replication Controller  控制POD有多個副本
- RS ReplicaSet              RC控制的升級版
- Deployment                 推薦使用,功能更強大,包含了RS控制器
- DaemonSet                  保證所有的Node上有且只有一個Pod在運行
- StatefulSet              有狀態的應用,為Pod提供唯一的標識,它可以保證部署和scale的順序

3.Service
  NodeIP  
  CluterIP
  POD IP  

DaemonSet

三個不通的ip

k8s安裝

手動安裝

https://www.kubernetes.org.cn/3096.html

涉及的命令

ipvsadm -Ln         #查看ipvs規則
kubectl get pod         #查看pod信息
kubectl get pod -o wide     #查看pod的詳細信息 ip labels
kubectl get pod -n kube-system -o wide  #指定查看某個命名空間的pod的詳細信息 
kubectl get nodes       #查看節點信息
kubectl get nodes -o wide   #查看節點詳細信息

kubectl -n kube-system edit cm kube-proxy   #編輯某個資源的配置文件
kubectl -n kube-system logs -f kube-proxy-7cdbn #查看指定命名空間里的指定pod的日誌


kubectl create -f kube-flannel.yml  #根據資源配置清單創建相應的資源
kubectl delete -f kube-flannel.yml      #刪除資源配置清單相應的資源

kubeadm reset           #重置kubeadm節點
kubeadm token create --print-join-command   #列印出node節點加入master節點的命令
kubeadm join 10.0.0.11:6443 --token uqf018.mia8v3i1zcai19sj     --discovery-token-ca-cert-hash sha256:e7d36e1fb53e59b12f0193f4733edb465d924321bcfc055f801cf1ea59d90aae  #node節點加入master的命令

實驗環境準備:

配置信息:
主機名   IP地址         推薦配置     勉強配置
node1     10.0.0.11    1C4G40G     1C2G     
node2     10.0.0.12    1C2G40G     1C1G
node3     10.0.0.13    1C2G40G     1C1G

初始化操作:
乾凈環境
關閉防火牆
關閉SELinux
配置時間同步
配置主機名
配置host解析
更新好阿裡源 
確保網路通暢

軟體準備:
harbor離線包 

1.防火牆關閉
iptables -nL
systemctl disable firewalld && systemctl stop firewalld
iptables -F
iptables -X
iptables -Z
iptables -nL

2.selinux關閉
getenforce
grep "disabled" /etc/selinux/config 
setenforce 0

3.同不定時任務
* * * * * /sbin/ntpdate time1.aliyun.com > /dev/null 2>&1

4.臨時關閉swap分區
swapoff -a
永久關閉
sed -ri 's/.*swap.*/#&/' /etc/fstab

安裝部署docker

1.設置國內YUM源
cd /etc/yum.repos.d/
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2.安裝指定的docker版本
yum -y install docker-ce-18.09.7-3.el7 docker-ce-cli-18.09.7

3.設置docker使用阿裡雲加速
mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
    {
      "registry-mirrors": ["https://ig2l319y.mirror.aliyuncs.com"],
      "exec-opts": ["native.cgroupdriver=systemd"]
    }
EOF

4.啟動後臺進程
systemctl enable docker && systemctl start docker

5.查看docker版本
docker -v

部署kubeadm和kubelet

 部署kubeadm和kubelet

註意!所有機器都需要操作!!!
註意!所有機器都需要操作!!!
註意!所有機器都需要操作!!!

1.設置k8s國內yum倉庫
cat >/etc/yum.repos.d/kubernetes.repo<<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF


2.安裝kubeadm
yum install -y kubelet-1.16.2 kubeadm-1.16.2 kubectl-1.16.2 ipvsadm

3.設置k8s禁止使用swap
cat > /etc/sysconfig/kubelet<<EOF
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
EOF

4.設置內核參數
cat >  /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system

5.設置kubelet開機啟動
systemctl enable kubelet && systemctl start kubelet

6.載入IPVS模塊
cat >/etc/sysconfig/modules/ipvs.modules<<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
chmod +x /etc/sysconfig/modules/ipvs.modules
source /etc/sysconfig/modules/ipvs.modules
lsmod | grep -e ip_vs -e nf_conntrack_ipv

node1節點初始化

1.初始化命令
https://v1-16.docs.kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/

註意!只在node1節點運行!!!
註意!只在node1節點運行!!!
註意!只在node1節點運行!!!

kubeadm init \
--apiserver-advertise-address=10.0.0.11 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.16.2 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.2.0.0/16 \
--service-dns-domain=cluster.local \
--ignore-preflight-errors=Swap \
--ignore-preflight-errors=NumCPU

執行完成後會有輸出,這是node節點加入k8s集群的命令
===============================================

kubeadm join 10.0.0.11:6443 --token 2an0sn.kykpta54fw6uftgq \
    --discovery-token-ca-cert-hash sha256:e7d36e1fb53e59b12f0193f4733edb465d924321bcfc055f801cf1ea59d90aae
 
===============================================

2.為kubectl準備kubeconfig
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

3.獲取node節點信息
[root@node1 ~]# kubectl get nodes
NAME    STATUS     ROLES    AGE   VERSION
node1   NotReady   master   15m   v1.16.

4.支持命令補全
yum install bash-completion -y
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
kubectl completion bash >/etc/bash_completion.d/kubectl

5.設置kube-proxy使用ipvs模式
#執行命令,然後將mode: ""修改為mode: "ipvs"然後保存退出
kubectl edit cm kube-proxy -n kube-system

#重啟kube-proxy
kubectl get pod -n kube-system |grep kube-proxy |awk '{system("kubectl delete pod "$1" -n kube-system")}'

#查看pod信息
kubectl get -n kube-system pod|grep "kube-proxy" 

#檢查日誌,如果出現IPVS rr就表示成功
[root@node1 ~]# kubectl -n kube-system logs -f kube-proxy-7cdbn 
I0225 08:03:57.736191       1 node.go:135] Successfully retrieved node IP: 10.0.0.11
I0225 08:03:57.736249       1 server_others.go:176] Using ipvs Proxier.
W0225 08:03:57.736841       1 proxier.go:420] IPVS scheduler not specified, use rr by default

#檢查IPVS規則
[root@node1 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.1.0.1:443 rr
  -> 10.0.0.11:6443               Masq    1      0          0         
TCP  10.1.0.10:53 rr
TCP  10.1.0.10:9153 rr
UDP  10.1.0.10:53 rr

顯示結果如下,安裝成功

kubeadm join 10.0.0.11:6443 --token ahpc8m.eo6crouhvqw5p8e3 \
    --discovery-token-ca-cert-hash sha256:b02959c21fddd87430985c7ee3a421c5c81c8d57434e258891a07f1b7faec543 

為什麼刪除kube-proxy

node1部署網路插件

部署網路插件
1.部署Flannel網路插件
git clone --depth 1 https://github.com/coreos/flannel.git

2.修改資源配置清單
cd /root/flannel-master/Documentation
vim kube-flannel.yml
egrep -n "10.2.0.0|mirror|eth0" kube-flannel.yml
128:      "Network": "10.2.0.0/16",
172:        image: quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64
186:        image: quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64
192:        - --iface=eth0   #新增加

3.應用資源配置清單
kubectl create -f kube-flannel.yml

4.檢查pod運行狀態,等一會應該全是running
[root@node1 ~]# kubectl -n kube-system get pod
NAME                            READY   STATUS    RESTARTS   AGE
coredns-58cc8c89f4-bzlkw        1/1     Running   0          77m
coredns-58cc8c89f4-sgs44        1/1     Running   0          77m
etcd-node1                      1/1     Running   0          76m
kube-apiserver-node1            1/1     Running   0          76m
kube-controller-manager-node1   1/1     Running   0          76m
kube-flannel-ds-amd64-cc5g6     1/1     Running   0          3m10s
kube-proxy-7cdbn                1/1     Running   0          23m
kube-scheduler-node1            1/1     Running   0          76m

修改錯配置文件

解決辦法:

查看pod信息
kubectl get -n kube-system pod|grep "kube-proxy" 

kubectl -n kube-system logs -f +pod對應的信息
503報錯
防火牆沒關

在目錄里操作:
第一步 kubectl delete -f kube-flannel.yml
第二步  cp kube-flannel.yml /opt
第三部 rm -rf kube-flannel.yml
然後把老師拖進來任意目錄下
最後執行kubectl create -f kube-flannel.yml
查看kubectl -n kube-system get pod

node2-3節點執行

1.在master節點上輸出增加節點的命令
kubeadm token create --print-join-command

2.在node2和node3節點執行加入集群的命令 每個人的token不一樣
kubeadm join 10.0.0.11:6443 --token uqf018.mia8v3i1zcai19sj     --discovery-token-ca-cert-hash sha256:e7d36e1fb53e59b12f0193f4733edb465d924321bcfc055f801cf1ea59d90aae 

3.在node1節點上查看狀態
kubectl get nodes

4.給其他節點打標簽
kubectl label nodes node2 node-role.kubernetes.io/node=
kubectl label nodes node3 node-role.kubernetes.io/node=

5.再次查看節點狀態
[root@node1 ~]# kubectl get nodes
NAME    STATUS   ROLES    AGE    VERSION
node1   Ready    master   171m   v1.16.2
node2   Ready    node     27m    v1.16.2
node3   Ready    node     27m    v1.16.2

常用資源類型

1.工作負載類型
  RC  ReplicaController
  RS  ReplicaSet 
  DP  Deployment
  DS  DaemonSet  

2.服務發現及負載均衡
  Service 
  Ingress 

3.配置與存儲資源
  ConfigMap 存儲配置文件
  Secret    存儲用戶字典

4.集群級別資源
  Namespace
  Node
  Role
  ClusterRole
  RoleBinding
  ClusterRoleBinding

資源配置清單

1.創建資源的方法
  apiserver僅能接受json格式的資源定義 
  yaml格式提供的清單,apiserver可以自動將其轉換為json格式再提交

2.資源清單介紹
  查看資源清單所需欄位
  kubectl explain pod

  資源清單欄位介紹
  apiVersion: v1  #屬於k8s哪一個API版本或組
  kind: Pod   #資源類型
  metadata:   #元數據,嵌套欄位
  spec:       #定義容器的規範,創建的容器應該有哪些特性
  
  status:     #只讀的,由系統控制,顯示當前容器的狀態


  json嵌套
{ 1級:
     { 2級:
          { 3級:Value

          }
      }
}


3.查看資源清單嵌套的命令
  kubectl explain pod
  kubectl explain pod.spec
  kubectl explain pod.spec.volumes

4.使用命令行創建一個pod
  kubectl create deployment nginx --image=nginx:alpine
  kubectl get pod -o wide


5.將剛纔創建的pod配置到處成yaml格式
  kubectl get pod -o yaml > nginx-pod.yaml
  
  精簡資源清單,刪掉不需要的配置
cat nginx-pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:alpine
    imagePullPolicy: IfNotPresent
    ports:
    - name: http
      containerPort: 80

  json格式寫法:
{
 apiVersion: "v1",
 kind: "Pod",
 metadata: 
   {
      name: "nginx", 
      labels: 
        {
           app: "nginx"
        }        
    }
 spec: 
   {
     containers:
       {
         name: "nginx",
         image: "nginx:alpine",
         imagePullPolicy: "IfNotPresent"
       }
   }    
}       

  刪除命令行創建的資源
  kubectl delete deployments.apps nginx

  應用資源配置清單
  kubectl create -f nginx-pod.yaml

  查看pod信息
  kubectl get pod -o wide

  查看pod詳細信息
  kubectl describe pod nginx
  
  
6.POD資源清單總結
  聲明式管理 我想運行一個Nginx k8s幫你幹活 
  
apiVersion: v1  #api版本
kind: Pod   #資源類型
metadata:   #元數據
  name: nginx   #元數據名稱
  labels:   #pod標簽
    app: nginx   
spec:       #容器定義
  containers:   #容器的特性
  - name: nginx #容器名稱
    image: nginx:alpine #容器的鏡像名稱
    imagePullPolicy: IfNotPresent  #容器的拉取策略
    ports:      #容器埠
    - name: http 
      containerPort: 80  #容器暴露的埠

升級版本

改變資源配置清單版本
image: "nginx:alpine",
執行
kubectl apply -f nginx-pod.yaml 

容器打標簽

1.標簽說明
  一個標簽可以給多個POD使用
  一個POD也可以擁有多個標簽
    
2.查看POD標簽
  kubectl get pod --show-labels

3.添加標簽方法
方法1:直接編輯資源配置清單:
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
    release: beta
----------------------
方法2:命令行打標簽
kubectl label pods nginx release=beta
kubectl label pods nginx job=linux
kubectl get pod --show-labels  


4.刪除標簽
kubectl label pod nginx job- 
kubectl get pod --show-labels


5.實驗: 生成2個POD,打上不同的標簽,然後根據標簽選擇
kubectl create deployment nginx --image=nginx:1.14.0
kubectl get pod --show-labels
kubectl label pods nginx-xxxxxxxx release=stable
kubectl get pod --show-labels

根據條件查看
kubectl get pods -l release=beta --show-labels 
kubectl get pods -l release=stable --show-labels 


根據條件刪除
kubectl delete pod -l app=nginx

Node打標簽

Node打標簽

1.查看node的標簽
kubectl get node --show-labels

2.給node打標簽
kubectl label nodes node2 CPU=Xeon
kubectl label nodes node3 disktype=ssd

3.編輯POD資源配置清單,使用node標簽選擇器
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.0
    imagePullPolicy: IfNotPresent
    ports:
    - name: http
      containerPort: 80
  nodeSelector:
    #CPU: Xeon
    disktype: SSD

4.刪除容器重新創建
kubectl delete pod nginx
kubectl create -f nginx-pod.yaml

5.查看結果
kubectl get pod -o wide

6.刪除節點標簽

部署harbor作為k8s鏡像倉庫

部署harbor作為k8s鏡像倉庫

1.實驗目標
  部署k8s私有鏡像倉庫harbor
  把demo小項目需要的鏡像上傳到harbor上
  修改demo項目的資源配置清單,鏡像地址修改為harbor的地址

2.在node1上安裝harbor
cd /opt/
tar zxf harbor-offline-installer-v1.9.0-rc1.tgz
cd harbor/

3.編輯harbor配置文件
vim harbor.yml
hostname: 10.0.0.11
port: 8888
harbor_admin_password: 123456
data_volume: /data/harbor

4.執行安裝
yum install docker-compose -y
./install.sh

5.瀏覽器訪問
http://10.0.0.11:8888
admin
123456

6.建立鏡像倉庫
這裡有2種訪問級別:
公開:任何人都可以直接訪問並下載鏡像
私有:登陸授權後才允許下載鏡像

如果創建私有倉庫,k8s是不能直接下載的,需要配置安全文件


7.所有節點都配置docker信任harbor倉庫並重啟docker
cat >/etc/docker/daemon.json <<EOF
    {
      "registry-mirrors": ["https://ig2l319y.mirror.aliyuncs.com"],
      "exec-opts": ["native.cgroupdriver=systemd"],
      "insecure-registries" : ["http://10.0.0.11:8888"]
    }
EOF
systemctl restart docker

###############註意###############
在node1上重啟docker後,如果harbor不正常了,重啟harbor即可
cd /opt/harbor
docker-compose restart 

8.docker登陸harbor
docker login 10.0.0.11:8888
admin
123456

9.在相對的節點上下載鏡像修改tag並push到harbor上
查看節點分佈
kubectl get pods -o wide
在node2上執行
docker login 10.0.0.11:8888
docker tag kubeguide/tomcat-app:v1 10.0.0.11:8888/k8s/tomcat-app:v1
docker tag mysql:5.7 10.0.0.11:8888/k8s/mysql:5.7

docker push 10.0.0.11:8888/k8s/tomcat-app:v1
docker push 10.0.0.11:8888/k8s/mysql:5.7 

10.節點上刪除鏡像
docker rmi mysql:5.7 
docker rmi kubeguide/tomcat-app:v1
docker rmi 10.0.0.11:8888/k8s/mysql:5.7 
docker rmi 10.0.0.11:8888/k8s/tomcat-app:v1

11.node1節點刪除以前的demo項目
kubectl delete -f tomcat-demo.yaml

12.修改demo項目的資源配置清單里的鏡像地址 直接第15開始
image: 10.0.0.11:8888/k8s/mysql:5.7
image: 10.0.0.11:8888/k8s/tomcat-app:v1

13.應用資源配置清單
kubectl create -f tomcat-demo.yaml 

14.報錯
此時查看pod狀態會發現鏡像拉取失敗了
[root@node1 ~/demo]# kubectl get pod
NAME                     READY   STATUS             RESTARTS   AGE
mysql-7d746b5577-jcs7q   0/1     ImagePullBackOff   0          8s
myweb-764df5ffdd-fptn9   0/1     ImagePullBackOff   0          8s
myweb-764df5ffdd-pmkz7   0/1     ErrImagePull       0          8s

查看pod創建的詳細信息
kubectl describe pod mysql-7d746b5577-jcs7q 

關鍵報錯信息:
Failed to pull image "10.0.0.11:8888/k8s/mysql:5.7": rpc error: code = Unknown desc = Error response from daemon: pull access denied for 10.0.0.11:8888/k8s/mysql, repository does not exist or may require 'docker login'


15.查看docker登陸的密碼文件
docker login 10.0.0.11:8888
cat /root/.docker/config.json

16.將docker密碼文件解碼成base64編碼
[root@node1 ~/demo]# cat /root/.docker/config.json|base64
ewoJImF1dGhzIjogewoJCSIxMC4wLjAuMTE6ODg4OCI6IHsKCQkJImF1dGgiOiAiWVdSdGFXNDZN
VEl6TkRVMiIKCQl9Cgl9LAoJIkh0dHBIZWFkZXJzIjogewoJCSJVc2VyLUFnZW50IjogIkRvY2tl
ci1DbGllbnQvMTguMDkuOSAobGludXgpIgoJfQp9

17.創建並應用docker登陸的Secret資源(master節點執行)
註意!!!
1.dockerconfigjson: xxx直接寫base64的編碼,不需要換行
2.base64編碼是一整行,不是好幾行
3.最後的type欄位不能少

cat >harbor-secret.yaml<<EOF 
apiVersion: v1
kind: Secret
metadata:
  name: harbor-secret
data:
  .dockerconfigjson: ewoJImF1dGhzIjogewoJCSIxMC4wLjAuMTE6ODg4OCI6IHsKCQkJImF1dGgiOiAiWVdSdGFXNDZNVEl6TkRVMiIKCQl9Cgl9LAoJIkh0dHBIZWFkZXJzIjogewoJCSJVc2VyLUFnZW50IjogIkRvY2tlci1DbGllbnQvMTguMDkuOSAobGludXgpIgoJfQp9
type: kubernetes.io/dockerconfigjson
EOF

kubectl create -f harbor-secret.yaml
kubectl get secrets

18.修改demo資源配置清單,添加拉取鏡像的參數
查看命令幫助
kubectl explain deployment.spec.template.spec.imagePullSecrets

修改文件
image: 10.0.0.11:8888/k8s/mysql:5.7
image: 10.0.0.11:8888/k8s/tomcat-app:v1
----------------------------
      imagePullSecrets: 
      - name: harbor-secret
  添加兩處 
----------------------------

19.應用資源配置清單並查看
kubectl create -f tomcat-demo.yaml 
kubectl get pod -o wide

20.瀏覽器查看
http://10.0.0.11:30001/demo

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 中間件和Filter 有哪些區別,分別的作用又是什麼,使用Endpoint 終結者路由的應用場景有哪些,怎麼使用Endpoint 終結者路由進行中間件的開發;我們知道,任何的一個web框架都是把http請求封裝成一個管道,每一次的請求都是經過管道的一系列操作,最終到達我們寫的代碼中。那麼中間件就是在... ...
  • 主機規劃 主機名稱操作系統版本內網IP外網IP(模擬)安裝軟體 ansi-manager CentOS7.5 172.16.1.180 10.0.0.180 ansible ansi-haproxy01 CentOS7.5 172.16.1.181 10.0.0.181 ansi-haproxy02 ...
  • 伙伴系統 Linux內核中採用了一種同時適用於32位和64位系統的記憶體分頁模型,對於32位系統來說,兩級頁表足夠用了,而在x86_64系統中,用到了四級頁表。四級頁表分別為: 頁全局目錄(Page Global Directory) 頁上級目錄(Page Upper Directory) 頁中間目錄 ...
  • Zabbix分散式監控系統 準備兩台虛擬機,yum源使用zabbix文件夾 基礎環境配置 主機名配置 # hostnamectl set-hostname zabbix-server # hostnamectl set-hostname zabbix-agent yum源配置(server) 將鏡像 ...
  • windows10下的時間同步地址,以及防火牆應該放行的程式 ...
  • 1. 多進程是操作系統的基本圖像 2. 是否可以資源不動而切換指令序列 兩個函數共用同一份數據的時候,可以用線程來運行它們,想java裡面的多線程就行 把進程的切換分成兩個部分,一個是指令的切換,一個是映射表(記憶體)的切換,現在只需知道指令的切換,也就是線程的切換 3. 切換線程是否實用? 4. 如 ...
  • 紅帽認證系統管理員(Red Hat Certified System Administrator):具備紅帽Linux環境所需的核心系統管理技能。 ...
  • Ingress控制器介紹 安裝部署traefik 創建traefik的web ui的ingress規則 ingress實驗 hostPath實驗 PV和PVC 研究的方向 重啟k8s二進位安裝(kubeadm)需要重啟組件 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...