主頁 > 作業系統 > 基于kubeadm快速部署kubernetes K8S V1.17.4集群-無坑完整版

基于kubeadm快速部署kubernetes K8S V1.17.4集群-無坑完整版

2020-09-12 21:26:01 作業系統

 

基于kubeadm快速部署kubernetes K8S V1.17.4集群,并部署Dashboard Web頁面,實作可視化查看Kubernetes資源

 

主機配置規劃

服務器名稱(hostname)系統版本配置內網IP外網IP(模擬)
k8s-master CentOS7.7 2C/4G/20G 172.16.1.110 10.0.0.110
k8s-node01 CentOS7.7 2C/4G/20G 172.16.1.111 10.0.0.111
k8s-node02 CentOS7.7 2C/4G/20G 172.16.1.112 10.0.0.112

注意:沒有swap磁區

 

預定完成目標項

1、在所有節點上安裝Docker和kubeadm

2、部署Kubernetes Master

3、部署容器網路插件

4、部署 Kubernetes Worker,并將節點加入Kubernetes集群中

5、部署Dashboard Web頁面,可視化查看Kubernetes資源

關于二進制安裝

kubeadm 是 Kubernetes 官方支持的安裝方式,“二進制” 不是,本檔案采用 kubernetes.io 官方推薦的 kubeadm 工具安裝 kubernetes 集群,

 

架構圖

 

安裝docker、安裝kubeadm,kubelet和kubectl

注意:所有機器都要安裝

腳本如下:

  1 [root@k8s-master k8s_install]# pwd
  2 /root/k8s_install
  3 # 腳本資訊如下【支持多次執行】
  4 [root@k8s-master k8s_install]# cat install_kubelet.sh  
  5 #!/bin/sh
  6 
  7 ##### 在 master 節點和 worker 節點都要執行 【所有機器執行】
  8 
  9 # 加載環境變數
 10 . /etc/profile
 11 . /etc/bashrc
 12 
 13 ###############################################
 14 # 添加主機名與IP對應關系(每臺主機必須設定主機名)
 15 # 如下命令:沒有則添加資訊  若使用請根據自身主機情況修改 ★★★★★ 「你需要修改處」
 16 grep '172.16.1.110.*k8s-master' /etc/hosts || echo "172.16.1.110  k8s-master" >> /etc/hosts
 17 grep '172.16.1.111.*k8s-node01' /etc/hosts || echo "172.16.1.111  k8s-node01" >> /etc/hosts
 18 grep '172.16.1.112.*k8s-node02' /etc/hosts || echo "172.16.1.112  k8s-node02" >> /etc/hosts
 19 
 20 
 21 ###############################################
 22 # 必要的基礎配置或包安裝
 23 ## 必須安裝 nfs-utils 才能掛載 nfs 網路存盤
 24 yum install -y nfs-utils
 25 ## wget 用于下載檔案
 26 yum install -y wget
 27 ## 其他必要包
 28 yum install -y conntrack ipvsadm ipset
 29 
 30 
 31 # 關閉 防火墻
 32 systemctl stop firewalld
 33 systemctl disable firewalld
 34 systemctl stop iptables
 35 systemctl disable iptables
 36 
 37 # 關閉 SeLinux
 38 setenforce 0
 39 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
 40 
 41 # 關閉 swap ,  本次涉及的機器沒有swap,因此注釋了
 42 ## 如果有swap磁區則放開注釋
 43 #swapoff -a
 44 #yes | cp /etc/fstab /etc/fstab_bak
 45 #cat /etc/fstab_bak | grep -v swap > /etc/fstab
 46 
 47 # 時間設定
 48 ## 時區設定:東八區,上海
 49 ls -l /etc/localtime | grep 'Asia/Shanghai' || (rm -f /etc/localtime && ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime)
 50 ## 時間同步定時任務:沒有則添加定,進行時間同步
 51 crontab -l | grep 'ntpdate' || echo -e "# time sync\n*/10 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1" >> /var/spool/cron/root
 52 ## 查看硬體時間 hwclock --show
 53 ## 系統時間同步到硬體時間
 54 hwclock --systohc
 55 
 56 # 關閉郵件服務
 57 systemctl stop postfix.service && systemctl disable postfix.service
 58 
 59 
 60 
 61 ###############################################
 62 # 修改 /etc/sysctl.conf
 63 # 開啟 ip_forward 轉發并解決流量路由不正確問題
 64 # 如果有配置,則修改
 65 sed -i "s#^net.ipv4.ip_forward.*#net.ipv4.ip_forward = 1#g"  /etc/sysctl.conf
 66 sed -i "s#^net.ipv4.tcp_tw_recycle.*#net.ipv4.tcp_tw_recycle = 0#g"  /etc/sysctl.conf
 67 sed -i "s#^net.bridge.bridge-nf-call-ip6tables.*#net.bridge.bridge-nf-call-ip6tables = 1#g"  /etc/sysctl.conf
 68 sed -i "s#^net.bridge.bridge-nf-call-iptables.*#net.bridge.bridge-nf-call-iptables = 1#g"  /etc/sysctl.conf
 69 # IPv6 轉發
 70 sed -i "s#^net.ipv6.conf.all.forwarding.*#net.ipv6.conf.all.forwarding = 1#g"  /etc/sysctl.conf
 71 sed -i "s#^net.netfilter.nf_conntrack_max.*#net.netfilter.nf_conntrack_max = 2310720#g"  /etc/sysctl.conf
 72 ## 如下兩條非必要
 73 sed -i "s#^fs.file-max.*#fs.file-max = 52706963#g"  /etc/sysctl.conf
 74 sed -i "s#^fs.nr_open.*#fs.nr_open = 52706963#g"    /etc/sysctl.conf
 75 
 76 # 如果沒有,追加
 77 grep 'net.ipv4.ip_forward = 1' /etc/sysctl.conf                   || echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
 78 grep 'net.ipv4.tcp_tw_recycle = 0' /etc/sysctl.conf               || echo "net.ipv4.tcp_tw_recycle = 0" >> /etc/sysctl.conf
 79 grep 'net.bridge.bridge-nf-call-ip6tables = 1' /etc/sysctl.conf   || echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
 80 grep 'net.bridge.bridge-nf-call-iptables = 1' /etc/sysctl.conf    || echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
 81 grep 'net.ipv6.conf.all.forwarding = 1' /etc/sysctl.conf          || echo "net.ipv6.conf.all.forwarding = 1"  >> /etc/sysctl.conf
 82 grep 'net.netfilter.nf_conntrack_max = 2310720' /etc/sysctl.conf  || echo "net.netfilter.nf_conntrack_max = 2310720"  >> /etc/sysctl.conf
 83 grep 'fs.file-max = 52706963' /etc/sysctl.conf        || echo "fs.file-max = 52706963"  >> /etc/sysctl.conf
 84 grep 'fs.nr_open = 52706963'  /etc/sysctl.conf        || echo "fs.nr_open = 52706963"   >> /etc/sysctl.conf
 85 
 86 # 執行命令以生效
 87 sysctl -p
 88 #### 說明:上面的命令中/etc/sysctl.conf可以用/etc/sysctl.d/k8s.conf替換;生效使用sysctl -p /etc/sysctl.d/k8s.conf 命令
 89 
 90 
 91 ###############################################
 92 # kube-proxy 開啟ipvs的前置條件【本步驟可忽略,但推薦使用IPVS】
 93 modprobe br_netfilter
 94 
 95 cat > /etc/sysconfig/modules/ipvs.modules << EOF
 96 #!/bin/bash
 97 modprobe -- ip_vs
 98 modprobe -- ip_vs_rr
 99 modprobe -- ip_vs_wrr
100 modprobe -- ip_vs_sh
101 modprobe -- nf_conntrack_ipv4
102 EOF
103 
104 chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
105 
106 
107 
108 ###############################################
109 # 安裝 docker
110 ## 參考檔案如下
111 # https://www.cnblogs.com/zhanglianghhh/p/9891293.html
112 # https://docs.docker.com/install/linux/docker-ce/centos/ 
113 # https://docs.docker.com/install/linux/linux-postinstall/
114 
115 ## 卸載舊版本  根據需要放開注釋
116 #yum remove -y docker \
117 #docker-client \
118 #docker-client-latest \
119 #docker-common \
120 #docker-latest \
121 #docker-latest-logrotate \
122 #docker-logrotate \
123 #docker-selinux \
124 #docker-engine-selinux \
125 #docker-engine
126 
127 ## 設定 docker yum repository
128 yum install -y yum-utils device-mapper-persistent-data lvm2
129 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
130 
131 ## 安裝docker
132 # yum install -y docker-ce
133 yum install -y docker-ce-19.03.8
134 
135 ## 啟動docker服務,這樣可以創建/etc/docker目錄
136 systemctl start docker
137 
138 ## 配置daemon
139 ## 1、修改docker Cgroup Driver為systemd;2、日志格式設定
140 ## 如果不修改,在添加 worker 節點時可能會碰到如下錯誤
141 ## [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". 
142 ## Please follow the guide at https://kubernetes.io/docs/setup/cri/
143 cat > /etc/docker/daemon.json << EOF
144 {
145   "exec-opts": ["native.cgroupdriver=systemd"],
146   "log-driver": "json-file",
147   "log-opts": {
148     "max-size": "100m"
149   }
150 }
151 EOF
152 
153 ## 開機自啟動
154 systemctl stop docker && systemctl daemon-reload && systemctl enable docker && systemctl start docker
155 
156 
157 
158 ###############################################
159 # 配置K8S的yum源
160 cat > /etc/yum.repos.d/kubernetes.repo <<EOF
161 [kubernetes]
162 name=Kubernetes
163 baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
164 enabled=1
165 gpgcheck=0
166 repo_gpgcheck=1
167 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
168        https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
169 EOF
170 
171 
172 # 卸載舊版本  根據需要放開注釋
173 #yum remove -y kubelet kubeadm kubectl
174 
175 # 由于版本更新頻繁,這里指定版本號部署
176 ## 安裝kubelet、kubeadm、kubectl
177 ## 將 ${1} 替換為 kubernetes 版本號,例如 1.17.4
178 ## yum install -y kubelet-${1} kubeadm-${1} kubectl-${1}
179 yum install -y kubelet-1.17.4 kubeadm-1.17.4 kubectl-1.17.4
180 
181 
182 # 重啟 docker,并啟動 kubelet
183 systemctl daemon-reload
184 systemctl restart docker
185 systemctl enable kubelet && systemctl start kubelet
186 
187 
188 # 列印分割線
189 echo "====================="
190 
191 # 列印docker版本資訊
192 docker version

執行上述腳本

 

kubelet 服務錯誤說明

用kubeadm的方法安裝kubelet后,運行systemctl status kubelet 和 journalctl -f -u kubelet 發現kubelet服務啟動失敗,錯誤代碼255,

 

后來查了資料,運行journalctl -xefu kubelet 命令查看systemd日志才發現,真正的錯誤是:

failed to load Kubelet config file /var/lib/kubelet/config.yaml, error failed to read kubelet config file "/var/lib/kubelet/config.yaml", error: open /var/lib/kubelet/config.yaml: no such file or directory

原因:

關鍵檔案缺失,多發生于沒有做 kubeadm init就運行了systemctl start kubelet,

暫時可以有不管,后面 kubeadm init 后會恢復正常,

 

部署Kubernetes Master與安裝Pod網路插件(CNI)

注意:僅在master節點操作

kubeadm init 配置詳解的官網地址如下:

https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/

這里使用 flannel 網路

 

master節點所需鏡像

kubernetes 服務啟動依賴很多鏡像,這些鏡像要是在國內沒有(fan qiang)的話,是下載不下來的,這里我們可以去阿里云容器鏡像服務【別人放好的鏡像】搜尋并下載指定版本的鏡像替代,

 

 

下載完成后,通過 docker tag … 命令修改成指定名稱的鏡像即可,

 

需要哪些鏡像及版本

需要哪些鏡像及版本,查看方式如下:

 1 [root@k8s-master ~]# kubeadm config images list --kubernetes-version v1.17.4
 2 W0728 16:31:09.770937    8119 validation.go:28] Cannot validate kube-proxy config - no validator is available
 3 W0728 16:31:09.770998    8119 validation.go:28] Cannot validate kubelet config - no validator is available
 4 k8s.gcr.io/kube-apiserver:v1.17.4
 5 k8s.gcr.io/kube-controller-manager:v1.17.4
 6 k8s.gcr.io/kube-scheduler:v1.17.4
 7 k8s.gcr.io/kube-proxy:v1.17.4
 8 k8s.gcr.io/pause:3.1
 9 k8s.gcr.io/etcd:3.4.3-0
10 k8s.gcr.io/coredns:1.6.5

 

獲取初始化默認組態檔并修改

 1 [root@k8s-master k8s_install]# pwd
 2 /root/k8s_install
 3 [root@k8s-master k8s_install]# kubeadm config print init-defaults > kubeadm-config.yaml
 4 # 做了適當修改
 5 [root@k8s-master k8s_install]# cat kubeadm-config.yaml 
 6 apiVersion: kubeadm.k8s.io/v1beta2
 7 bootstrapTokens:
 8 - groups:
 9   - system:bootstrappers:kubeadm:default-node-token
10   token: abcdef.0123456789abcdef
11   ttl: 24h0m0s
12   usages:
13   - signing
14   - authentication
15 kind: InitConfiguration
16 localAPIEndpoint:
17   # 改為本機內網IP
18   advertiseAddress: 172.16.1.110
19   bindPort: 6443
20 nodeRegistration:
21   criSocket: /var/run/dockershim.sock
22   name: k8s-master
23   taints:
24   - effect: NoSchedule
25     key: node-role.kubernetes.io/master
26 ---
27 apiServer:
28   timeoutForControlPlane: 4m0s
29 apiVersion: kubeadm.k8s.io/v1beta2
30 certificatesDir: /etc/kubernetes/pki
31 clusterName: kubernetes
32 controllerManager: {}
33 dns:
34   type: CoreDNS
35 etcd:
36   local:
37     dataDir: /var/lib/etcd
38 imageRepository: k8s.gcr.io
39 kind: ClusterConfiguration
40 # 本次部署的版本為 v1.17.4
41 kubernetesVersion: v1.17.4
42 networking:
43   dnsDomain: cluster.local
44   # 添加如下行,指定pod網路的IP地址范圍,因為flannel 就是這個網段
45   podSubnet: 10.244.0.0/16
46   # 默認值即可,無需改變,服務VIP使用可選的IP地址范圍,默認10.96.0.0/12
47   serviceSubnet: 10.96.0.0/12
48 scheduler: {}
49 ---
50 # 添加如下配置段,調度方式從默認改為ipvs方式【如果上面初始化沒有做ipvs,那么這段就不需要】
51 apiVersion: kubeproxy.config.k8s.io/v1alpha1
52 kind: KubeProxyConfiguration
53 featureGates:
54   SupportIPVSProxyMode: true
55 mode: ipvs

 

kubeadm init與flannel網路安裝

創建 init_master.sh檔案并撰寫腳本進行批量下載鏡像;之后修改鏡像tag,與google的k8s鏡像名稱一致;再之后初始化并安裝Pod網路插件,

腳本如下:

 1 [root@k8s-master k8s_install]# pwd
 2 /root/k8s_install
 3 [root@k8s-master k8s_install]# cat init_master.sh
 4 #!/bin/bash
 5 
 6 ##### 在 k8s master 節點執行
 7 
 8 # 加載環境變數
 9 . /etc/profile
10 . /etc/bashrc
11 
12 
13 ###############################################
14 # 從國內下載 master 節點所需鏡像,并對鏡像重命名  
15 # src_registry="registry.aliyuncs.com/google_containers"
16 src_registry="registry.cn-beijing.aliyuncs.com/google_registry"
17 
18 # 定義鏡像集合陣列
19 # 具體版本資訊根據 kubeadm config images list --kubernetes-version v1.17.4 得到的
20 images=(
21     kube-apiserver:v1.17.4
22     kube-controller-manager:v1.17.4
23     kube-scheduler:v1.17.4
24     kube-proxy:v1.17.4
25     pause:3.1
26     etcd:3.4.3-0
27     coredns:1.6.5
28 )
29 # 回圈從國內獲取的Docker鏡像
30 for img in ${images[@]};
31 do
32     # 從國內源下載鏡像
33     docker pull ${src_registry}/$img
34     # 改變鏡像名稱
35     docker tag  ${src_registry}/$img k8s.gcr.io/$img
36     # 洗掉源始鏡像
37     docker rmi  ${src_registry}/$img
38     # 列印分割線
39     echo "======== $img download OK  ========"
40 done
41 echo "********** k8s master docker images pull OK! **********"
42 
43 
44 ###############################################
45 # kubeadm 初始化
46 ##### 初始化方式1
47 # 這個初始化程序需要幾分鐘,具體時間取決于你的網路,
48 # --apiserver-advertise-address=x.x.x.x 本機內網地址 ★★★★★ 「你需要修改處」
49 # --service-cidr=x.x.x.x 為服務VIP使用可選的IP地址范圍,默認10.96.0.0/12
50 # --pod-network-cidr=x.x.x.x  指定pod網路的IP地址范圍,
51 #kubeadm init \
52 #  --apiserver-advertise-address=172.16.1.110 \
53 #  --kubernetes-version v1.17.4 \
54 #  --service-cidr=10.96.0.0/12 \
55 #  --pod-network-cidr=10.244.0.0/16
56 
57 ##### 初始化方式2 【推薦方式】
58 # --upload-certs 自動頒發證書,高可用有意義,單機可選
59 # kubeadm-config.yaml檔案,通過上文已得到該檔案
60 kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.log
61 echo "********** kubeadm init OK! **********"
62 
63 
64 # 配置 kubectl
65 mkdir -p $HOME/.kube/
66 cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
67 chown $(id -u):$(id -g) $HOME/.kube/config
68 echo "********** kubectl config OK! **********"
69 
70 
71 ###############################################
72 # Kubernetes CNI扁平化網路:Flannel、Calico、Canal和Weave
73 # https://blog.csdn.net/RancherLabs/article/details/88885539
74 # 安裝 kube-flannel 網路
75 # 若能夠訪問到quay.io這個registery,可以注釋掉下面3行docker命令, 在 kube-flannel.yml 檔案中可得到 flannel 版本資訊   
76 # 如果不能訪問 quay.io這個registery,那么請使用下面3行
77 docker pull ${src_registry}/flannel:v0.12.0-amd64
78 docker tag  ${src_registry}/flannel:v0.12.0-amd64 quay.io/coreos/flannel:v0.12.0-amd64
79 docker rmi  ${src_registry}/flannel:v0.12.0-amd64 
80 # 如果下載失敗,那么可通過 https://github.com/coreos/flannel/blob/v0.12.0/Documentation/kube-flannel.yml 頁面拷貝到本地
81 wget https://raw.githubusercontent.com/coreos/flannel/v0.12.0/Documentation/kube-flannel.yml
82 kubectl apply -f kube-flannel.yml
83 echo "********** kube-flannel network OK! **********"
84 
85 
86 ###############################################
87 # master節點驗證所有pod狀態
88 echo "********** kubectl get pods --all-namespaces -o wide **********"
89 # kubectl get pods -A -o wide  # 與下面的命令等效
90 kubectl get pods --all-namespaces -o wide
91 
92 # master節點查看node狀態
93 echo "********** kubectl get nodes **********"
94 kubectl get nodes
95 
96 echo "********** 獲得 join 命令引數 **********"
97 kubeadm token create --print-join-command

執行上述腳本

 

部分命令說明:

查看所有pods運行資訊

kubectl get pods --all-namespaces  # 或者kubectl get pods -A
kubectl get pods --all-namespaces -o wide

 

查看所有node節點資訊,其中master也是一個節點

kubectl get nodes
kubectl get nodes -o wide

 

獲得 join命令引數,復制后在其他node節點執行,執行后加入該master節點,形成一個集群

kubeadm token create --print-join-command

 

flannel扁平化網路查看

通過ifconfig命令,可見已經存在了扁平化網路,

 

扁平化網路說明:

Kubernetes 的網路模型假定了所有Pod都在一個可以直接連通的扁平化的網路空間中,這在GCE(Google Compute Engine)里面是現成的網路模型,Kubernetes 假定這個網路已經存在,而在私有云里搭建 Kubernetes 集群,就不能假定這個網路已經存在,我們需要自己實作這個網路假設,將不同節點上的 Docker 容器之間的互相訪問先打通,然后運行 Kubernetes,

同一個Pod內的多個容器之間通訊:lo

各Pod之間的通訊:Overlay Network

Pod與Service之間的通訊:各節點的Iptables規則或者ipvs

Flannel 是 CoreOS 團隊針對 Kubernetes 設計的一個網路規劃服務,簡單來說,它的功能是讓集群中的不同節點主機創建的 Docker 容器都具有全集群唯一的虛擬IP地址,而且它還能在這些IP地址之間建立一個覆寫網路(Overlay Network),通過這個覆寫網路,將資料包原封不動的傳遞到目標容器內,

flannel網路如下圖:

 

 

部署Kubernetes Node并加入Kubernetes集群

備注:僅在worker節點執行  

獲得 join命令初始化worker節點并加入master

在master執行如下命令獲取join引數,

1 [root@k8s-master ~]# kubeadm token create --print-join-command
2 kubeadm join 172.16.1.110:6443 --token jb8qa8.wbjx2k7t8vuvqf4q     --discovery-token-ca-cert-hash sha256:a694fbe124afd00c0024d4be102037d8f84c9e2e1da1c6638b7788ad71f556ef

有效時間,該 token 的有效時間為 2 個小時,2小時內可以使用此 token 初始化任意數量的 worker 節點,

本文根據規劃在k8s-node01、k8s-node02機器上執行,

 

執行完畢后,在master機器查看節點資訊:

 1 [root@k8s-master ~]# kubectl get nodes
 2 NAME         STATUS     ROLES    AGE   VERSION
 3 k8s-master   Ready      master   47m   v1.17.4
 4 k8s-node01   NotReady   <none>   30s   v1.17.4
 5 k8s-node02   NotReady   <none>   25s   v1.17.4
 6 [root@k8s-master ~]# 
 7 [root@k8s-master ~]# kubectl get nodes -o wide
 8 NAME         STATUS     ROLES    AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION           CONTAINER-RUNTIME
 9 k8s-master   Ready      master   48m   v1.17.4   172.16.1.110   <none>        CentOS Linux 7 (Core)   3.10.0-1062.el7.x86_64   docker://19.3.8
10 k8s-node01   NotReady   <none>   56s   v1.17.4   172.16.1.111   <none>        CentOS Linux 7 (Core)   3.10.0-1062.el7.x86_64   docker://19.3.8
11 k8s-node02   NotReady   <none>   51s   v1.17.4   172.16.1.112   <none>        CentOS Linux 7 (Core)   3.10.0-1062.el7.x86_64   docker://19.3.8
12 # 因為此時在k8s-node01、k8s-node02沒有flannel鏡像,因此pod未啟動
13 [root@k8s-master ~]# kubectl get pods -A -o wide
14 NAMESPACE     NAME                                 READY   STATUS              RESTARTS   AGE   IP             NODE         NOMINATED NODE   READINESS GATES
15 kube-system   coredns-6955765f44-c9zfh             1/1     Running             0          48m   10.244.0.2     k8s-master   <none>           <none>
16 kube-system   coredns-6955765f44-lrz5q             1/1     Running             0          48m   10.244.0.3     k8s-master   <none>           <none>
17 kube-system   etcd-k8s-master                      1/1     Running             0          48m   172.16.1.110   k8s-master   <none>           <none>
18 kube-system   kube-apiserver-k8s-master            1/1     Running             0          48m   172.16.1.110   k8s-master   <none>           <none>
19 kube-system   kube-controller-manager-k8s-master   1/1     Running             0          48m   172.16.1.110   k8s-master   <none>           <none>
20 kube-system   kube-flannel-ds-amd64-dngrk          1/1     Running             0          46m   172.16.1.110   k8s-master   <none>           <none>
21 kube-system   kube-flannel-ds-amd64-h4sn6          0/1     Init:0/1            0          76s   172.16.1.111   k8s-node01   <none>           <none>
22 kube-system   kube-flannel-ds-amd64-m92wp          0/1     Init:0/1            0          71s   172.16.1.112   k8s-node02   <none>           <none>
23 kube-system   kube-proxy-28dwj                     0/1     ContainerCreating   0          76s   172.16.1.111   k8s-node01   <none>           <none>
24 kube-system   kube-proxy-c875m                     1/1     Running             0          48m   172.16.1.110   k8s-master   <none>           <none>
25 kube-system   kube-proxy-stg6w                     0/1     ContainerCreating   0          71s   172.16.1.112   k8s-node02   <none>           <none>
26 kube-system   kube-scheduler-k8s-master            1/1     Running             0          48m   172.16.1.110   k8s-master   <none>           <none>

說明:k8s-node01、k8s-node02狀態為NotReady

 

獲取worker節點鏡像

備注:僅在worker節點執行

創建 init_worker.sh檔案并撰寫腳本批量下載鏡像;之后修改鏡像tag,與google的k8s鏡像名稱一致;再之后下載Pod網路插件,

腳本如下:

 1 [root@k8s-node01 k8s_install]# pwd
 2 /root/k8s_install
 3 [root@k8s-node01 k8s_install]# cat init_worker.sh 
 4 #!/bin/bash
 5 
 6 ##### 在 k8s worker 節點執行
 7 
 8 # 加載環境變數
 9 . /etc/profile
10 . /etc/bashrc
11 
12 
13 ###############################################
14 # 從國內下載 node 節點所需鏡像,并對鏡像重命名  
15 # src_registry="registry.aliyuncs.com/google_containers"
16 src_registry="registry.cn-beijing.aliyuncs.com/google_registry"
17 # 定義鏡像集合陣列
18 # 具體版本資訊根據 kubeadm config images list --kubernetes-version v1.17.4 得到的
19 images=(
20     kube-apiserver:v1.17.4
21     kube-controller-manager:v1.17.4
22     kube-scheduler:v1.17.4
23     kube-proxy:v1.17.4
24     pause:3.1
25     etcd:3.4.3-0
26     coredns:1.6.5
27 )
28 # 回圈從國內獲取的Docker鏡像
29 for img in ${images[@]};
30 do
31     # 從國內源下載鏡像
32     docker pull ${src_registry}/$img
33     # 改變鏡像名稱
34     docker tag  ${src_registry}/$img k8s.gcr.io/$img
35     # 洗掉源始鏡像
36     docker rmi  ${src_registry}/$img
37     # 列印分割線
38     echo "======== $img download OK  ========"
39 done
40 echo "********** k8s node docker images pull OK! **********"
41 
42 
43 
44 ###############################################
45 # Kubernetes CNI網路:Flannel、Calico、Canal和Weave
46 # https://blog.csdn.net/RancherLabs/article/details/88885539
47 # 確保能夠訪問到quay.io這個registery,
48 #docker pull quay.io/coreos/flannel:v0.12.0-amd64
49 # 如果不能訪問 quay.io這個registery,那么請使用下面3行,或從master那邊將 flannel 鏡像打包過來即可
50 docker pull ${src_registry}/flannel:v0.12.0-amd64
51 docker tag  ${src_registry}/flannel:v0.12.0-amd64 quay.io/coreos/flannel:v0.12.0-amd64
52 docker rmi  ${src_registry}/flannel:v0.12.0-amd64
53 echo "********** flannel image OK! **********"

本文根據規劃在k8s-node01、k8s-node02機器上執行,

 

work執行完畢后在master機器查看資訊

執行完畢后,在master機器查看節點資訊:

 1 # 所有節點都是Ready狀態了
 2 [root@k8s-master ~]# kubectl get nodes
 3 NAME         STATUS   ROLES    AGE     VERSION
 4 k8s-master   Ready    master   56m     v1.17.4
 5 k8s-node01   Ready    <none>   9m35s   v1.17.4
 6 k8s-node02   Ready    <none>   9m30s   v1.17.4
 7 [root@k8s-master ~]# kubectl get nodes -o wide
 8 NAME         STATUS   ROLES    AGE     VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION           CONTAINER-RUNTIME
 9 k8s-master   Ready    master   57m     v1.17.4   172.16.1.110   <none>        CentOS Linux 7 (Core)   3.10.0-1062.el7.x86_64   docker://19.3.8
10 k8s-node01   Ready    <none>   9m47s   v1.17.4   172.16.1.111   <none>        CentOS Linux 7 (Core)   3.10.0-1062.el7.x86_64   docker://19.3.8
11 k8s-node02   Ready    <none>   9m42s   v1.17.4   172.16.1.112   <none>        CentOS Linux 7 (Core)   3.10.0-1062.el7.x86_64   docker://19.3.8
12 [root@k8s-master ~]# kubectl get pods -A -o wide
13 NAMESPACE     NAME                                 READY   STATUS    RESTARTS   AGE     IP             NODE         NOMINATED NODE   READINESS GATES
14 kube-system   coredns-6955765f44-c9zfh             1/1     Running   0          57m     10.244.0.2     k8s-master   <none>           <none>
15 kube-system   coredns-6955765f44-lrz5q             1/1     Running   0          57m     10.244.0.3     k8s-master   <none>           <none>
16 kube-system   etcd-k8s-master                      1/1     Running   0          57m     172.16.1.110   k8s-master   <none>           <none>
17 kube-system   kube-apiserver-k8s-master            1/1     Running   0          57m     172.16.1.110   k8s-master   <none>           <none>
18 kube-system   kube-controller-manager-k8s-master   1/1     Running   0          57m     172.16.1.110   k8s-master   <none>           <none>
19 kube-system   kube-flannel-ds-amd64-dngrk          1/1     Running   0          55m     172.16.1.110   k8s-master   <none>           <none>
20 kube-system   kube-flannel-ds-amd64-h4sn6          1/1     Running   0          10m     172.16.1.111   k8s-node01   <none>           <none>
21 kube-system   kube-flannel-ds-amd64-m92wp          1/1     Running   0          9m57s   172.16.1.112   k8s-node02   <none>           <none>
22 kube-system   kube-proxy-28dwj                     1/1     Running   0          10m     172.16.1.111   k8s-node01   <none>           <none>
23 kube-system   kube-proxy-c875m                     1/1     Running   0          57m     172.16.1.110   k8s-master   <none>           <none>
24 kube-system   kube-proxy-stg6w                     1/1     Running   0          9m57s   172.16.1.112   k8s-node02   <none>           <none>
25 kube-system   kube-scheduler-k8s-master            1/1     Running   0          57m     172.16.1.110   k8s-master   <none>           <none>

說明:k8s-node01、k8s-node02狀態為Ready,且所有pod都正常運行

 

移除worker節點

正常情況下,無需移除 worker 節點,如果添加到集群出錯,可以移除 worker 節點,再重新嘗試添加,

比如:移除k8s-node01節點,步驟如下:

在準備移除的 worker 節點上執行

# 只在 worker 節點執行
[root@k8s-node01 ~]# kubeadm reset

 

在 master 節點上執行

# 只在 master 執行
[root@k8s-master ~]# kubectl delete node k8s-node01
node "k8s-node01" deleted

 

集群版本查看

執行如下命令即可

1 [root@k8s-master ~]# kubectl version
2 Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.4", GitCommit:"8d8aa39598534325ad77120c120a22b3a990b5ea", GitTreeState:"clean", BuildDate:"2020-03-12T21:03:42Z", GoVersion:"go1.13.8", Compiler:"gc", Platform:"linux/amd64"}
3 Server Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.4", GitCommit:"8d8aa39598534325ad77120c120a22b3a990b5ea", GitTreeState:"clean", BuildDate:"2020-03-12T20:55:23Z", GoVersion:"go1.13.8", Compiler:"gc", Platform:"linux/amd64"}

到這來,整個集群已經部署完畢,可以歡呼了!

 

部署 Dashboard

本次部署版本版本:v2.0.0-rc6,不能部署v1.10.0版本,因為該版本過低不匹配,

Dashboard 的GitHub地址:

https://github.com/kubernetes/dashboard/

 

版本選擇

 

下載dashboard鏡像

鏡像下載腳本,在所有節點執行,因為dashboard會根據調度部署在任意節點,

腳本如下:

 1 [root@k8s-master k8s_install]# pwd
 2 /root/k8s_install
 3 [root@k8s-master k8s_install]# cat install_dashboard.sh 
 4 #!/bin/sh
 5 
 6 ##### 在 master 節點和 worker 節點都要執行 【所有機器執行】
 7 
 8 # 加載環境變數
 9 . /etc/profile
10 . /etc/bashrc
11 
12 ###############################################
13 # 從國內下載 k8s dashboard 所需鏡像,并對鏡像重命名  
14 src_registry="registry.cn-beijing.aliyuncs.com/google_registry"
15 # 定義鏡像集合陣列 
16 # V1.17.x 版本對應的 dashboard 不能使用 dashboard:v1.10.1 該版本低,不匹配
17 images=(
18     dashboard:v2.0.0-rc6
19     metrics-scraper:v1.0.3
20 )
21 # 回圈從國內獲取的Docker鏡像
22 for img in ${images[@]};
23 do
24     # 從國內源下載鏡像
25     docker pull ${src_registry}/$img
26     # 改變鏡像名稱
27     docker tag  ${src_registry}/$img kubernetesui/$img
28     # 洗掉源始鏡像
29     docker rmi  ${src_registry}/$img
30     # 列印分割線
31     echo "======== $img download OK  ========"
32 done
33 echo "********** k8s dashboard docker images OK! **********"

 

部署 Dashboard

在k8s-master上操作

獲取dashboard的recommended.yaml

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc6/aio/deploy/recommended.yaml

 

修改recommended.yaml配置,如下:

 1 [root@k8s-master k8s_install]# pwd
 2 /root/k8s_install
 3 [root@k8s-master k8s_install]# vim recommended.yaml
 4 ………………
 5 kind: Service
 6 apiVersion: v1
 7 metadata:
 8   labels:
 9     k8s-app: kubernetes-dashboard
10   name: kubernetes-dashboard
11   namespace: kubernetes-dashboard
12 spec:
13   # 添加處
14   type: NodePort
15   ports:
16     - port: 443
17       targetPort: 8443
18       # 添加處
19       nodePort: 30001
20   selector:
21     k8s-app: kubernetes-dashboard
22 ………………
23   template:
24     metadata:
25       labels:
26         k8s-app: kubernetes-dashboard
27     spec:
28       containers:
29         - name: kubernetes-dashboard
30           image: kubernetesui/dashboard:v2.0.0-rc6
31           # 修改處 從 Always 改為了 IfNotPresent
32           #imagePullPolicy: Always
33           imagePullPolicy: IfNotPresent
34 ………………
35     spec:
36       containers:
37         - name: dashboard-metrics-scraper
38           image: kubernetesui/metrics-scraper:v1.0.3
39           # 添加如下行
40           imagePullPolicy: IfNotPresent

 

啟動dashboard

kubectl apply -f recommended.yaml

 

查看dashboard運行情況

 1 [root@k8s-master ~]# kubectl get pods -A -o wide
 2 NAMESPACE              NAME                                         READY   STATUS    RESTARTS   AGE    IP             NODE         NOMINATED NODE   READINESS GATES
 3 kube-system            coredns-6955765f44-kdcj7                     1/1     Running   1          3h6m   10.244.0.5     k8s-master   <none>           <none>
 4 kube-system            coredns-6955765f44-v9pzk                     1/1     Running   1          3h6m   10.244.0.4     k8s-master   <none>           <none>
 5 kube-system            etcd-k8s-master                              1/1     Running   1          3h6m   172.16.1.110   k8s-master   <none>           <none>
 6 kube-system            kube-apiserver-k8s-master                    1/1     Running   1          3h6m   172.16.1.110   k8s-master   <none>           <none>
 7 kube-system            kube-controller-manager-k8s-master           1/1     Running   1          3h6m   172.16.1.110   k8s-master   <none>           <none>
 8 kube-system            kube-flannel-ds-amd64-9nzhv                  1/1     Running   1          167m   172.16.1.111   k8s-node01   <none>           <none>
 9 kube-system            kube-flannel-ds-amd64-cft6f                  1/1     Running   1          3h6m   172.16.1.110   k8s-master   <none>           <none>
10 kube-system            kube-flannel-ds-amd64-sm7d7                  1/1     Running   1          167m   172.16.1.112   k8s-node02   <none>           <none>
11 kube-system            kube-proxy-dprqm                             1/1     Running   1          167m   172.16.1.112   k8s-node02   <none>           <none>
12 kube-system            kube-proxy-k9l5r                             1/1     Running   1          3h6m   172.16.1.110   k8s-master   <none>           <none>
13 kube-system            kube-proxy-mdfsl                             1/1     Running   1          167m   172.16.1.111   k8s-node01   <none>           <none>
14 kube-system            kube-scheduler-k8s-master                    1/1     Running   1          3h6m   172.16.1.110   k8s-master   <none>           <none>
15 kubernetes-dashboard   dashboard-metrics-scraper-7b8b58dc8b-hr7lf   1/1     Running   0          93s    10.244.2.2     k8s-node02   <none>           <none>
16 kubernetes-dashboard   kubernetes-dashboard-755dcb9575-9c5h8        1/1     Running   0          93s    10.244.3.2     k8s-node01   <none>           <none>
17 [root@k8s-master ~]# 
18 [root@k8s-master ~]# kubectl get pods -n kubernetes-dashboard -o wide   # -n 指定namespace
19 NAME                                         READY   STATUS    RESTARTS   AGE     IP           NODE         NOMINATED NODE   READINESS GATES
20 dashboard-metrics-scraper-7b8b58dc8b-hr7lf   1/1     Running   0          2m50s   10.244.2.2   k8s-node02   <none>           <none>
21 kubernetes-dashboard-755dcb9575-9c5h8        1/1     Running   0          2m50s   10.244.3.2   k8s-node01   <none>           <none>

 

查看services服務資訊

 1 # 或則使用 kubectl get svc -A
 2 [root@k8s-master ~]# kubectl get services --all-namespaces
 3 NAMESPACE              NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
 4 default                kubernetes                  ClusterIP   10.96.0.1        <none>        443/TCP                  3h19m
 5 kube-system            kube-dns                    ClusterIP   10.96.0.10       <none>        53/UDP,53/TCP,9153/TCP   3h19m
 6 kubernetes-dashboard   dashboard-metrics-scraper   ClusterIP   10.104.251.180   <none>        8000/TCP                 4m55s
 7 kubernetes-dashboard   kubernetes-dashboard        NodePort    10.111.61.235    <none>        443:30001/TCP            4m55s
 8 [root@k8s-master ~]# 
 9 # 或則使用 kubectl get svc -n kubernetes-dashboard
10 [root@k8s-master ~]# kubectl get services --namespace=kubernetes-dashboard
11 NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
12 dashboard-metrics-scraper   ClusterIP   10.104.251.180   <none>        8000/TCP        5m13s
13 kubernetes-dashboard        NodePort    10.111.61.235    <none>        443:30001/TCP   5m13s

 

瀏覽器訪問

根據規劃,訪問如下地址:

https://172.16.1.110:30001/

 

如果谷歌瀏覽器不能打開,參見如下博文:解決Google瀏覽器不能打開kubernetes dashboard方法【轉】

https://blog.csdn.net/weixin_30535043/article/details/102395724

  

也可以使用火狐瀏覽器打開,瀏覽器添加例外后,訪問得到如下頁面:

 

使用令牌登錄(需要創建能夠訪問 Dashboard 的用戶)

創建service account并系結默認cluster-admin管理員集群角色

 1 [root@k8s-master k8s_install]# pwd
 2 /root/k8s_install
 3 [root@k8s-master k8s_install]# cat account.yaml 
 4 # Create Service Account
 5 apiVersion: v1
 6 kind: ServiceAccount
 7 metadata:
 8   name: admin-user
 9   namespace: kube-system
10 ---
11 # Create ClusterRoleBinding
12 apiVersion: rbac.authorization.k8s.io/v1
13 kind: ClusterRoleBinding
14 metadata:
15   name: admin-user
16 roleRef:
17   apiGroup: rbac.authorization.k8s.io
18   kind: ClusterRole
19   name: cluster-admin
20 subjects:
21 - kind: ServiceAccount
22   name: admin-user
23   namespace: kube-system
24 [root@k8s-master k8s_install]# kubectl apply -f account.yaml   # 執行 yaml 檔案

 

查看系結資訊

1 [root@k8s-master k8s_install]# kubectl get clusterrolebinding
2 NAME                                                   AGE
3 admin-user                                             58s
4 cluster-admin                                          5h47m
5 flannel                                                5h45m
6 kubeadm:kubelet-bootstrap                              5h47m
7 kubeadm:node-autoapprove-bootstrap                     5h47m
8 kubeadm:node-autoapprove-certificate-rotation          5h47m
9 ………………

 

獲取tocken

kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

 

 

將得到的token資訊用于訪問,結果如下:【可能需要等幾分鐘頁面才能刷出來】

 

完畢!

 


 

 

———END———
如果覺得不錯就關注下唄 (-^O^-) !

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/17186.html

標籤:Linux

上一篇:Docker資料卷的創建與應用

下一篇:JDK安裝及JAVA_HOME配置

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • CA和證書

    1、在 CentOS7 中使用 gpg 創建 RSA 非對稱密鑰對 gpg --gen-key #Centos上生成公鑰/密鑰對(存放在家目錄.gnupg/) 2、將 CentOS7 匯出的公鑰,拷貝到 CentOS8 中,在 CentOS8 中使用 CentOS7 的公鑰加密一個檔案 gpg -a ......

    uj5u.com 2020-09-10 00:09:53 more
  • Kubernetes K8S之資源控制器Job和CronJob詳解

    Kubernetes的資源控制器Job和CronJob詳解與示例 ......

    uj5u.com 2020-09-10 00:10:45 more
  • VMware下安裝CentOS

    VMware下安裝CentOS 一、軟硬體準備 1 Centos鏡像準備 1.1 CentOS鏡像下載地址 下載地址 1.2 CentOS鏡像下載程序 點擊下載地址進入如下圖的網站,選擇需要下載的版本,這里選擇的是Centos8,點擊如圖所示。 決定選擇Centos8后,選擇想要的鏡像源進行下載,此 ......

    uj5u.com 2020-09-10 00:12:10 more
  • 如何使用Grep命令查找多個字串

    如何使用Grep 命令查找多個字串 大家好,我是良許! 今天向大家介紹一個非常有用的技巧,那就是使用 grep 命令查找多個字串。 簡單介紹一下,grep 命令可以理解為是一個功能強大的命令列工具,可以用它在一個或多個輸入檔案中搜索與正則運算式相匹配的文本,然后再將每個匹配的文本用標準輸出的格式 ......

    uj5u.com 2020-09-10 00:12:28 more
  • git配置http代理

    git配置http代理 經常遇到克隆 github 慢的問題,這里記錄一下幾種配置 git 代理的方法,解決 clone github 過慢。 目錄 git配置代理 git單獨配置github代理 git配置全域代理 配置終端環境變數 git配置代理 主要使用 git config 命令 git單獨 ......

    uj5u.com 2020-09-10 00:12:33 more
  • Linux npm install 裝包時提示Error EACCES permission denied解

    npm install 裝包時提示Error EACCES permission denied解決辦法 ......

    uj5u.com 2020-09-10 00:12:53 more
  • Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包

    Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包。 18 (flaskApi) [root@67 flaskDemo]# yum -y install nginx 19 已加載插件:fastestmirror, langpacks 20 Loading ......

    uj5u.com 2020-09-10 00:13:13 more
  • Linux查看服務器暴力破解ssh IP

    在公網的服務器上經常遇到別人爆破你服務器的22埠,用來挖礦或者干其他嘿嘿嘿的事情~ 這種情況下正確的做法是: 修改默認ssh的22埠 使用設定密鑰登錄或者白名單ip登錄 建議服務器密碼為復雜密碼 創建普通用戶登錄服務器(root權限過大) 建立堡壘機,實作統一管理服務器 統計爆破IP [root ......

    uj5u.com 2020-09-10 00:13:17 more
  • CentOS 7系統常見快捷鍵操作方式

    Linux系統中一些常見的快捷方式,可有效提高操作效率,在某些時刻也能避免操作失誤帶來的問題。 ......

    uj5u.com 2020-09-10 00:13:31 more
  • CentOS 7作業系統目錄結構介紹

    作業系統存在著大量的資料檔案資訊,相應檔案資訊會存在于系統相應目錄中,為了更好的管理資料資訊,會將系統進行一些目錄規劃,不同目錄存放不同的資源。 ......

    uj5u.com 2020-09-10 00:13:35 more
最新发布
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:43:21 more
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:42:36 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:26:53 more
  • 設定Windows主機的瀏覽器為wls2的默認瀏覽器

    這里以Chrome為例。 1. 準備作業 wsl是可以使用Windows主機上安裝的exe程式,出于安全考慮,默認情況下改功能是無法使用。要使用的話,終端需要以管理員權限啟動。 我這里以Windows Terminal為例,介紹如何默認使用管理員權限打開終端,具體操作如下圖所示: 2. 操作 wsl ......

    uj5u.com 2023-04-19 09:25:49 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:19:04 more
  • Linux學習筆記

    IP地址和主機名 IP地址 ifconfig可以用來查詢本機的IP地址,如果不能使用,可以通過install net-tools安裝。 Centos系統下ens33表示主網卡;inet后表示IP地址;lo表示本地回環網卡; 127.0.0.1表示代指本機;0.0.0.0可以用于代指本機,同時在放行設 ......

    uj5u.com 2023-04-18 06:52:01 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:50 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:01 more
  • 你是不是暴露了?

    作者:袁首京 原創文章,轉載時請保留此宣告,并給出原文連接。 如果您是計算機相關從業人員,那么應該經歷不止一次網路安全專項檢查了,你肯定是收到過資訊系統技術檢測報告,要求你加強風險監測,確保你提供的系統服務堅實可靠了。 沒檢測到問題還好,檢測到問題的話,有些處理起來還是挺麻煩的,尤其是線上正在運行的 ......

    uj5u.com 2023-04-05 16:52:56 more
  • 細節拉滿,80 張圖帶你一步一步推演 slab 記憶體池的設計與實作

    1. 前文回顧 在之前的幾篇記憶體管理系列文章中,筆者帶大家從宏觀角度完整地梳理了一遍 Linux 記憶體分配的整個鏈路,本文的主題依然是記憶體分配,這一次我們會從微觀的角度來探秘一下 Linux 內核中用于零散小記憶體塊分配的記憶體池 —— slab 分配器。 在本小節中,筆者還是按照以往的風格先帶大家簡單 ......

    uj5u.com 2023-04-05 16:44:11 more