国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

輕量級 K8S 環(huán)境、本地 K8S 環(huán)境Minikube,一鍵使用 (史上最全)

這篇具有很好參考價值的文章主要介紹了輕量級 K8S 環(huán)境、本地 K8S 環(huán)境Minikube,一鍵使用 (史上最全)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

文章很長,而且持續(xù)更新,建議收藏起來,慢慢讀!瘋狂創(chuàng)客圈總目錄 博客園版 為您奉上珍貴的學(xué)習(xí)資源 :

免費(fèi)贈送 :《尼恩Java面試寶典》 持續(xù)更新+ 史上最全 + 面試必備 2000頁+ 面試必備 + 大廠必備 +漲薪必備
免費(fèi)贈送 經(jīng)典圖書:《Java高并發(fā)核心編程(卷1)加強(qiáng)版》 面試必備 + 大廠必備 +漲薪必備 加尼恩免費(fèi)領(lǐng)
免費(fèi)贈送 經(jīng)典圖書:《Java高并發(fā)核心編程(卷2)加強(qiáng)版》 面試必備 + 大廠必備 +漲薪必備 加尼恩免費(fèi)領(lǐng)
免費(fèi)贈送 經(jīng)典圖書:《Java高并發(fā)核心編程(卷3)加強(qiáng)版》 面試必備 + 大廠必備 +漲薪必備 加尼恩免費(fèi)領(lǐng)
免費(fèi)贈送 經(jīng)典圖書:《尼恩Java面試寶典 V11》 面試必備 + 大廠必備 +漲薪必備 加尼恩免費(fèi)領(lǐng)
免費(fèi)贈送 資源寶庫: Java 必備 百度網(wǎng)盤資源大合集 價值>10000元 加尼恩領(lǐng)取

學(xué)習(xí) 云原生+ 微服務(wù)的神器

本地、輕量級 K8S 環(huán)境,一鍵啟動, 學(xué)習(xí) 云原生+ 微服務(wù) , 非常方便

尼恩會給大家準(zhǔn)備好 虛擬機(jī)的box文件,可以直接用,省去 折騰的煩惱
minikube,java,kubernetes,java,容器

minikube,java,kubernetes,java,容器

最小化K8s環(huán)境部署之Minikube

minikube 背景

徒手搭建過k8s的同學(xué)都曉得其中的煎熬,復(fù)雜的認(rèn)證,配置環(huán)節(jié)相當(dāng)折磨人,出錯率相當(dāng)高,

而minikube就是為解決這個問題而衍生出來的工具,它基于go語言開發(fā),

minikube可以在單機(jī)環(huán)境下快速搭建可用的k8s集群,非常適合測試和本地開發(fā),現(xiàn)有的大部分在線k8s實(shí)驗環(huán)境也是基于minikube

可以在minikube上體驗kubernetes的相關(guān)功能。

minikube基于go語言開發(fā), 是一個易于在本地運(yùn)行 Kubernetes 的工具,可在你的筆記本電腦上的虛擬機(jī)內(nèi)輕松創(chuàng)建單機(jī)版 Kubernetes 集群。

便于嘗試 Kubernetes 或使用 Kubernetes 日常開發(fā)。

可以在單機(jī)環(huán)境下快速搭建可用的k8s集群,非常適合測試和本地開發(fā)。

所以,可以在本地實(shí)驗環(huán)境來安裝minikube,來入門學(xué)習(xí)kubernetes相關(guān)的知識;

什么是minikube

minikube 是本地 Kubernetes,

優(yōu)點(diǎn)是:快速啟動,消耗機(jī)器資源較少,非常適合新手體驗與開發(fā)。

1、Kubernetes集群架構(gòu)

通常情況下,一套完整的Kubernetes集群至少需要包括master節(jié)點(diǎn)和node節(jié)點(diǎn),

下圖是常規(guī)k8s的集群架構(gòu),master節(jié)點(diǎn)一般是獨(dú)立的,用于協(xié)調(diào)調(diào)試其它節(jié)點(diǎn)之用,而容器實(shí)際運(yùn)行都是在node節(jié)點(diǎn)上,kubectl位于 master節(jié)點(diǎn)。

minikube,java,kubernetes,java,容器

2、Minikube架構(gòu)

下圖是 Minikube的架構(gòu),可以看出,master 節(jié)點(diǎn)與其它節(jié)點(diǎn)合為一體,而整體則通過宿主機(jī)上的 kubectl 進(jìn)行管理,這樣可以更加節(jié)省資源。

minikube,java,kubernetes,java,容器

其支持大部分kubernetes的功能,列表如下

  • DNS
  • NodePorts
  • ConfigMaps and Secrets
  • Dashboards
  • Container Runtime: Docker, and rkt
  • Enabling CNI (Container Network Interface)
  • Ingress

Minikube 支持 Windows、macOS、Linux 三種 OS,會根據(jù)平臺不同,下載對應(yīng)的虛擬機(jī)鏡像,并在鏡像內(nèi)安裝 k8s。

minikube安裝前準(zhǔn)備

推薦在linux主機(jī)上安裝,我本地用的是 centos。

安裝minikube的主機(jī)必要配置:

  • 2 CPUs or more
  • 2GB of free memory
  • 20GB of free disk space
  • Internet connection
  • Container or virtual machine manager, such as: Docker, Hyperkit, Hyper-V, KVM, Parallels, Podman, VirtualBox, or VMware

Container 容器我本地安裝是docker;

docker的安裝

安裝過程,請參見下面的文檔:

Docker 入門到精通 (圖解+秒懂+史上最全) - 瘋狂創(chuàng)客圈 - 博客園 (cnblogs.com)

注:由于國內(nèi)訪問docker鏡像庫很是緩慢,所以建議配置阿里云的代理,通過修改daemon配置文件/etc/docker/daemon.json來使用加速器:

$ cd /etc/docker
# 在daemon.json文件末尾追加如下配置:
$ sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://bjtzu1jb.mirror.aliyuncs.com",
    "http://f1361db2.m.daocloud.io",
    "https://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://reg-mirror.qiniu.com",
    "https://dockerhub.azk8s.cn",
    "https://registry.docker-cn.com"
  ]
}

EOF

# 重啟docker
sudo systemctl daemon-reload
sudo systemctl restart docker

版本要求

For improved Docker performance, Upgrade Docker to a newer version (Minimum recommended version is 18.09.0)
! docker is currently using the devicemapper storage driver, consider switching to overlay2 for better performance
* Using image repository registry.cn-hangzhou.aliyuncs.com/google_containers
* Starting control plane node minikube in cluster minikube
* Pulling base image ...
* Creating docker container (CPUs=2, Memory=2200MB) ...
* Preparing Kubernetes v1.23.1 on Docker 20.10.8 ...

docker 版本:

[root@cdh1 ~]#  docker version
Client: Docker Engine - Community
 Version:           20.10.23
 API version:       1.41
 Go version:        go1.18.10
 Git commit:        7155243
 Built:             Thu Jan 19 17:36:21 2023
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.23
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.18.10
  Git commit:       6051f14
  Built:            Thu Jan 19 17:34:26 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.15
  GitCommit:        5b842e528e99d4d4c1686467debf2bd4b88ecd86
 runc:
  Version:          1.1.4
  GitCommit:        v1.1.4-0-g5fd4c4d
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

關(guān)閉虛擬機(jī)swap、selinux、firewalld

# 臨時關(guān)閉swap
swapoff -a
 
# 臨時關(guān)閉selinux,如永久關(guān)閉請配置為permissive
setenforce 0
 
# 關(guān)閉防火墻
systemctl stop firewalld
systemctl disable firewalld

永久關(guān)閉swap可注釋掉/etc/fstab中的swap行,然后重啟。

永久關(guān)閉selinux可編輯/etc/sysconfig/selinux,配置為SELINUX=permissive,然后重啟。

此處為常規(guī)操作不詳述。

編輯虛擬機(jī)hosts文件

與安裝k8s類似,需要添加主機(jī)名解析

echo "127.0.0.1 test1" >> /etc/hosts

其中test1為虛擬機(jī)主機(jī)名。

如果不添加該解析,啟動minikube時會有如下報錯:

[WARNING Hostname]: hostname "test1" could not be reached[WARNING Hostname]: hostname "test1": lookup test1 on 172.18.3.4:53: no such host

登錄阿里云

注冊阿里云賬號, 開通容器鏡像服務(wù)

docker login --username=修改成你自己的賬號 registry.cn-hangzhou.aliyuncs.com

 docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/kaigejava/my_kaigejava:[鏡像版本號]

 docker push registry.cn-hangzhou.aliyuncs.com/kaigejava/my_kaigejava:[鏡像版本號] 

創(chuàng)建用戶,加入docker用戶組

新建一個minikube用戶

useradd minikube

新建一個用戶組

groupadd docker

將minikube添加到docker組

usermod -aG docker minikube

將當(dāng)前用戶添加到該docker組(root)

usermod -aG docker $USER

更新用戶組

newgrp docker

重啟docker

sudo systemctl daemon-reload
sudo systemctl restart docker

讓用戶minikube獲得root權(quán)限

1、添加用戶,首先用adduser命令添加一個普通用戶,命令如下:

添加一個名為minikube的用戶

  • adduser minikube 添加用戶

  • passwd minikube//修改密碼

2、賦予root權(quán)限 (三種方法,推薦第三)

方法一: 修改 /etc/sudoers 文件,找到下面一行,把前面的注釋(#)去掉

## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL

然后修改用戶,使其屬于root組(wheel),命令如下:

#usermod -g root minikube

修改完畢,現(xiàn)在可以用minikube帳號登錄,然后用命令 su – ,即可獲得root權(quán)限進(jìn)行操作。

方法二: 修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示:

## Allow root to run any commands anywhere
root ALL=(ALL) ALL
minikube ALL=(ALL) ALL

修改完畢,現(xiàn)在可以用minikube帳號登錄,然后用命令 su – ,即可獲得root權(quán)限進(jìn)行操作。

su minikube

su -

方法三: 修改 /etc/passwd 文件,直接修改用戶id為0,就是root的用戶id

cat /etc/passwd

minikube,java,kubernetes,java,容器

7 個字段的詳細(xì)信息如下:

(1)用戶名 (user1): 已創(chuàng)建用戶的用戶名,字符長度 1 個到 12 個字符。如果是“*”的話,那么就表示該賬號被查封了,系統(tǒng)不允許持有該賬號的用戶登錄。

(2)密碼(x):代表加密密碼,保存在 /etc/shadow 文件中。

(3)用戶 ID(1001):代表用戶的 ID 號,每個用戶都要有一個唯一的 ID 。UID 號為 0 的是為 root 用戶保留的,UID 號 1 到99 是為系統(tǒng)用戶保留的,UID 號 100-999 是為系統(tǒng)賬戶和群組保留的。

(4)群組 ID (100):代表user1用戶所屬群組的 ID 號,每個群組都要有一個唯一的 GID ,群組信息保存在 /etc/group文件中。

(5)用戶信息(用戶1):代表描述字段,可以用來描述用戶的信息。

(6)家目錄(/usr/testUser):代表用戶的主目錄。

(7)Shell(/bin/bash):代表用戶使用的 shell 類型。

找到如下行,把用戶ID修改為 0 ,如下所示:

minikube:x:1001:1001::/hminikubekube:/bin/bash

修改后如下

minikube:x:0:1001::/home/minikube:/bin/bash

保存,用minikube賬戶登錄后,直接獲取的就是root帳號的權(quán)限。

安裝minikube

minikube的官網(wǎng):minikube start | minikube (k8s.io)

安裝與啟動minikube

官網(wǎng)上的安裝minikube網(wǎng)速實(shí)在太慢了,推薦使用阿里云的鏡像來進(jìn)行安裝minikube,

直接安裝minikube

#阿里云鏡像
curl -Lo minikube https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.23.1/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/

#官方二進(jìn)制包下載

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64

sudo install minikube-linux-amd64 /usr/local/bin/minikube

65M

minikube,java,kubernetes,java,容器

linux 下載太慢,我用瀏覽器下載后, 放在虛擬機(jī)共享目錄

然后 復(fù)制到 /usr/local/bin

[root@cdh1 ~]# su kube
[root@cdh1 root]# cp /vagrant/minikube-linux-amd64 /usr/local/bin/
[root@cdh1 root]# cp /vagrant/minikube-linux-amd64 /usr/local/bin
[root@cdh1 root]# chmod +x /usr/local/bin/minikube-linux-amd64
[root@cdh1 root]# mv  /usr/local/bin/minikube-linux-amd64  /usr/local/bin/minikube

啟動minikube

minikube start

執(zhí)行minikube start出現(xiàn) The “docker” driver should not be used with root privileges 的報錯.

minikube,java,kubernetes,java,容器

如果是本地測試環(huán)境,根本就不需要考慮那么多,直接執(zhí)行以下命令,強(qiáng)制使用docker:

minikube start --force --driver=docker
# 或者使用阿里云鏡像啟動
minikube start --force --driver=docker --image-mirror-country cn --iso-url=https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/iso/minikube-v1.5.0.iso --registry-mirror=https://xxxxxx.mirror.aliyuncs.com 

minikube start --force --driver=docker --image-mirror-country='cn' --iso-url=https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/iso/minikube-v1.5.0.iso --registry-mirror=https://xxxxxx.mirror.aliyuncs.com 


還是有問題, docker image 下載不了

minikube,java,kubernetes,java,容器

血和淚,用過的 命令list

minikube start --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --registry-mirror=https://ovfftd6p.mirror.aliyuncs.com  --image-mirror-country='cn'   --force --driver=docker 

sudo minikube start --kubernetes-version=v1.23.1 --image-mirror-country='cn' --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers'


minikube start  --kubernetes-version=v1.23.1  --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers' --registry-mirror='https://ovfftd6p.mirror.aliyuncs.com'  --image-mirror-country='cn'   --force --driver=docker



minikube start  --kubernetes-version=v1.23.1  --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers' --image-mirror-country='cn'   --force --driver=docker



minikube start  --kubernetes-version=v1.23.1  --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers' --image-mirror-country='cn'   --force --driver=docker


minikube start  --kubernetes-version=v1.23.1  --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers' --registry-mirror='https://ovfftd6p.mirror.aliyuncs.com'  --image-mirror-country='cn'   --force --driver=docker


minikube start  --kubernetes-version=v1.23.1  --image-repository='registry.aliyuncs.com/google_containers' --registry-mirror='https://ovfftd6p.mirror.aliyuncs.com'  --image-mirror-country='cn'   --force --driver=docker


minikube start  --kubernetes-version=v1.23.1 --image-mirror-country='cn'   --force --driver=docker


minikube start  --kubernetes-version=v1.23.1  --image-repository='registry.aliyuncs.com/google_containers' --registry-mirror='https://ovfftd6p.mirror.aliyuncs.com'  --image-mirror-country='cn'   --force --driver=none


su minikube

minikube delete

minikube start  --kubernetes-version=v1.23.1  --image-mirror-country='cn' --image-repository='registry.aliyuncs.com/google_containers' --registry-mirror='https://ovfftd6p.mirror.aliyuncs.com'    --force --driver=docker



minikube start  --kubernetes-version=v1.23.1  --image-mirror-country='cn' --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers'   --force --driver=docker

minikube start 參數(shù)

啟動命令:minikube start "參數(shù)"

  • –image-mirror-country cn 將缺省利用 registry.cn-hangzhou.aliyuncs.com/google_containers 作為安裝Kubernetes的容器鏡像倉庫,
  • –iso-url=*** 利用阿里云的鏡像地址下載相應(yīng)的 .iso 文件
  • –cpus=2: 為minikube虛擬機(jī)分配CPU核數(shù)
  • –memory=2000mb: 為minikube虛擬機(jī)分配內(nèi)存數(shù)
  • –kubernetes-version=***: minikube 虛擬機(jī)將使用的 kubernetes 版本 ,e.g. --kubernetes-version v 1.17.3
  • –docker-env http_proxy 傳遞代理地址

默認(rèn)啟動使用的是 VirtualBox 驅(qū)動,使用 --vm-driver 參數(shù)可以指定其它驅(qū)動
# https://minikube.sigs.k8s.io/docs/drivers/
- --vm-driver=none 表示用容器;
- --vm-driver=virtualbox 表示用虛擬機(jī);

注意: To use kubectl or minikube commands as your own user, you may need to relocate them. For example, to overwrite your own settings, run:

    sudo mv /root/.kube /root/.minikube $HOME
    sudo chown -R $USER $HOME/.kube $HOME/.minikube
示例#
–vm-driver=kvm2

參考: https://minikube.sigs.k8s.io/docs/drivers/kvm2/

minikube start --image-mirror-country cn --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --registry-mirror=https://ovfftd6p.mirror.aliyuncs.com --driver=kvm2
–vm-driver=hyperv
# 創(chuàng)建基于Hyper-V的Kubernetes測試環(huán)境
minikube.exe start --image-mirror-country cn \
    --iso-url=https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/iso/minikube-v1.5.0.iso \
    --registry-mirror=https://xxxxxx.mirror.aliyuncs.com \
    --vm-driver="hyperv" \
    --hyperv-virtual-switch="MinikubeSwitch" \
    --memory=4096
–vm-driver=none
sudo minikube start --image-mirror-country cn --vm-driver=none

minikube,java,kubernetes,java,容器

sudo minikube start --vm-driver=none --docker-env http_proxy=http://$host_IP:8118 --docker-env https_proxy=https:// $host_IP:8118

其中$host_IP指的是host的IP,可以通過ifconfig查看;比如在我這臺機(jī)器是10.0.2.15,用virtualbox部署,則用下列命令啟動minikube

sudo minikube start --vm-driver=none --docker-env http_proxy=http://10.0.2.15:8118 --docker-env https_proxy=https://10.0.2.15:8118


sudo minikube start --kubernetes-version=v1.23.1 --image-mirror-country='cn' --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers'

sudo minikube start --kubernetes-version=v1.23.1 --image-mirror-country='cn' --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers' --extra-config=kubelet.cgroup 

拉取鏡像的問題

錯誤日志查看
minikube logs

Q1:解決minikube拉取鏡像速度緩慢的問題

需要進(jìn)入minikube進(jìn)程內(nèi)部,修改遠(yuǎn)程鏡像倉庫

minikube ssh
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

解決 minikube start 過程中拉取鏡像慢的問題

之前下載失敗后的minikube,想要重新下載記得先刪除

minikube delete --all

拉取鏡像慢可以拉取國內(nèi)倉庫,minikube start的時候會幫我們下載新版的kubernetes,但是我這里不太支持最新版的,所以需要指定kubernetes版本

minikube start --kubernetes-version=v1.23.1 --image-mirror-country='cn' --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers'


minikube start  --kubernetes-version=v1.23.1  --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers' --registry-mirror='https://ovfftd6p.mirror.aliyuncs.com'  --image-mirror-country='cn'   --force --driver=docker

minikube start  --kubernetes-version=v1.23.1  --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers' --registry-mirror='https://ovfftd6p.mirror.aliyuncs.com'  --image-mirror-country='cn'   --force --driver=docker --extra-config=kubelet.cgroup-driver=systemd

minikube start  --kubernetes-version=v1.23.1  --image-repository='registry.aliyuncs.com/google_containers' --registry-mirror=https://kfwkfulq.mirror.aliyuncs.com  --image-mirror-country='cn'   --force --driver=docker --extra-config=kubelet.cgroup-driver=systemd

--registry-mirror=https://bjtzu1jb.mirror.aliyuncs.com

minikube start  --kubernetes-version=v1.23.1  --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers' --registry-mirror='https://bjtzu1jb.mirror.aliyuncs.com'  --image-mirror-country='cn'   --force --driver=docker --extra-config=kubelet.cgroup-driver=systemd


minikube start  --kubernetes-version=v1.23.1  --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers' --registry-mirror='https://bjtzu1jb.mirror.aliyuncs.com'  --image-mirror-country='cn'   --force --driver=docker --extra-config=kubelet.cgroup-driver=systemd  --base-image="registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase:v0.0.27"




Q2:基礎(chǔ)鏡像拉不下來

錯誤日志查看
minikube logs
基礎(chǔ)鏡像拉不下來

minikube,java,kubernetes,java,容器



registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase:v0.0.27


鏡像地址調(diào)整為 registry.aliyuncs.com


registry.aliyuncs.com/google_containers/kicbase:v0.0.27

單獨(dú)下載

 docker pull registry.aliyuncs.com/google_containers/kicbase:v0.0.27

打tag

docker tag registry.aliyuncs.com/google_containers/kicbase:v0.0.27   registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase:v0.0.27

刪除老的tag

[root@cdh1 ~]# docker image ls
REPOSITORY                                                    TAG                 IMAGE ID            CREATED             SIZE
registry.aliyuncs.com/google_containers/kicbase               v0.0.27             9fa1cc16ad6d        16 months ago       1.08GB
registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase   v0.0.27             9fa1cc16ad6d        16 months ago       1.08GB

[root@cdh1 ~]# docker rmi  registry.aliyuncs.com/google_containers/kicbase:v0.0.27
Untagged: registry.aliyuncs.com/google_containers/kicbase:v0.0.27
Untagged: registry.aliyuncs.com/google_containers/kicbase@sha256:89b4738ee74ba28684676e176752277f0db46f57d27f0e08c3feec89311e22de

2.指定鏡像啟動

因為 registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase:v0.0.27 自動下載、sha校驗失敗,而無法啟動集群!

手動下載后,打tag后

還有驗證環(huán)節(jié),需要指定鏡像,忽略SHA校驗

參數(shù)
–base-image 指定鏡像,忽略SHA校驗

使用以下命令啟動minikube:

minikube start  --kubernetes-version=v1.23.1  --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers' --registry-mirror='https://bjtzu1jb.mirror.aliyuncs.com'  --image-mirror-country='cn'   --force --driver=docker --extra-config=kubelet.cgroup-driver=systemd  --base-image="registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase:v0.0.27"

minikube start  --kubernetes-version=v1.23.1  --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers' --registry-mirror='https://bjtzu1jb.mirror.aliyuncs.com'  --image-mirror-country='cn'   --force --driver=docker  --base-image="registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase:v0.0.27"

終于開始創(chuàng)建容器,開始啟動了

minikube,java,kubernetes,java,容器

Q3: 新的問題來了:coredns 鏡像找不到

X Unable to load cached images: loading cached images: Docker load /var/lib/minikube/images/coredns_v1.8.4: loadimage docker.: /bin/bash -c "sudo cat /var/lib/minikube/images/coredns_v1.8.4 | docker load": Process exited with status 1

直接下載

docker pull coredns/coredns:1.8.4

改tag

docker tag coredns/coredns:1.8.4  registry.cn-hangzhou.aliyuncs.com/google_containers/coredns/coredns:v1.8.4 

刪除舊tag

docker rmi coredns/coredns:1.8.4

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.4  registry.cn-hangzhou.aliyuncs.com/google_containers/coredns/coredns:v1.8.4 


docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns/coredns:v1.8.4  registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.4  

再次啟動

minikube,java,kubernetes,java,容器

Q4:繼續(xù)下載鏡像

 
#從國內(nèi)鏡像拉取

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.1-0
docker pull coredns/coredns:1.8.6


docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.23.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.23.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.23.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.23.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.5





docker pull  registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.23.1 
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.23.1 
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.23.1 
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.23.1 
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.5 
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.0-0 
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns/coredns:v1.8.4 
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/k8s-minikube/storage-provisioner:v5 
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetesui/dashboard:v2.3.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetesui/metrics-scraper:v1.0.7



 docker pull k8s-minikube/storage-provisioner:v5 
 docker pull kubernetesui/dashboard:v2.3.1

 docker pull kubernetesui/metrics-scraper:v1.0.7


docker pull  registry.aliyuncs.com/k8s-minikube/storage-provisioner:v5 
registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.6


registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.6


 registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.1-0
 
 
 docker pull etcd/etcd:3.5.1-0

改tag

docker tag coredns/coredns:1.8.4  registry.cn-hangzhou.aliyuncs.com/google_containers/coredns/coredns:v1.8.4 

Q5:使用阿里云代理http://k8s.gcr.io鏡像倉庫

國內(nèi)根本訪問不了k8s的鏡像庫:k8s.gsc.io。

? 比如下載k8s.gcr.io/coredns:1.6.5鏡像,在國內(nèi)默認(rèn)是下載失敗的!

[root@k8s-vm03 ~]# docker pull k8s.gcr.io/coredns:1.6.5
Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

部署K8S最大的難題是鏡像下載,在國內(nèi)無翻墻環(huán)境情況下很難從k8s.gcr.io等鏡像源里下載鏡像。
這種情況下正確做法是:

  1. 直接指定國內(nèi)鏡像代理倉庫(如阿里云代理倉庫)進(jìn)行鏡像拉取下載。
  2. 成功拉取代理倉庫中的鏡像后,再將其tag打標(biāo)簽成為k8s.gcr.io對應(yīng)鏡像。
  3. 最后再刪除從代理倉庫中拉取下來的鏡像。
  4. 要確保imagePullPolicy策略是IfNotPresent,即本地有鏡像則使用本地鏡像,不拉取!
    或者將下載的鏡像放到harbor私有倉庫里,然后將image下載源指向harbor私倉地址。
# 阿里云代理倉庫地址為:registry.aliyuncs.com/google_containers
# 比如下載
k8s.gcr.io/coredns:1.6.5
# 可以代理為:
registry.aliyuncs.com/google_containers/coredns:1.6.5

下面以阿里云代理倉庫為例進(jìn)行說明:

# 比如下載k8s.gcr.io/coredns:1.6.5鏡像,在國內(nèi)默認(rèn)是下載失敗的!
 
[root@k8s-vm01 coredns]# pwd
/opt/k8s/work/kubernetes/cluster/addons/dns/coredns
[root@k8s-vm01 coredns]# fgrep "image" ./*
./coredns.yaml:        image: k8s.gcr.io/coredns:1.6.5
./coredns.yaml:        imagePullPolicy: IfNotPresent
 
[root@k8s-vm03 ~]# docker pull k8s.gcr.io/coredns:1.6.5
Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
 
# 這時候去指定國內(nèi)的阿里云鏡像代理倉庫進(jìn)行下載
[root@k8s-vm03 ~]# docker pull registry.aliyuncs.com/google_containers/coredns:1.6.5
1.6.5: Pulling from google_containers/coredns
c6568d217a00: Pull complete
fc6a9081f665: Pull complete
Digest: sha256:608ac7ccba5ce41c6941fca13bc67059c1eef927fd968b554b790e21cc92543c
Status: Downloaded newer image for registry.aliyuncs.com/google_containers/coredns:1.6.5
registry.aliyuncs.com/google_containers/coredns:1.6.5
 
# 然后打tag,并刪除之前從代理倉庫下載的鏡像
[root@k8s-vm03 ~]# docker tag registry.aliyuncs.com/google_containers/coredns:1.6.5 k8s.gcr.io/coredns:1.6.5
 
[root@k8s-vm03 ~]# docker images
REPOSITORY                                        TAG                 IMAGE ID            CREATED             SIZE
k8s.gcr.io/coredns                                1.6.5               70f311871ae1        5 months ago        41.6MB
registry.aliyuncs.com/google_containers/coredns   1.6.5               70f311871ae1        5 months ago        41.6MB
 
[root@k8s-vm03 ~]# docker rmi registry.aliyuncs.com/google_containers/coredns:1.6.5
Untagged: registry.aliyuncs.com/google_containers/coredns:1.6.5
Untagged: registry.aliyuncs.com/google_containers/coredns@sha256:608ac7ccba5ce41c6941fca13bc67059c1eef927fd968b554b790e21cc92543c
 
[root@k8s-vm03 ~]# docker images
REPOSITORY                               TAG                 IMAGE ID            CREATED             SIZE
k8s.gcr.io/coredns                       1.6.5               70f311871ae1        5 months ago        41.6MB
 
# 最終發(fā)現(xiàn)我們想要的k8s.gcr.io/coredns:1.6.5鏡像被成功下載下來了!
 
# 最后要記得:
# 確定imagePullPolicy鏡像下載策略是IfNotPresent,即本地有鏡像則使用本地鏡像,不拉??!
# 或者將下載好的鏡像放到harbor私有倉庫里,然后將image下載地址指向harbor倉庫地址。

以上總結(jié)三個步驟:

docker pull registry.aliyuncs.com/google_containers/coredns:1.6.5
docker tag registry.aliyuncs.com/google_containers/coredns:1.6.5 k8s.gcr.io/coredns:1.6.5
docker rmi registry.aliyuncs.com/google_containers/coredns:1.6.5

Virtual Box 使用的問題

Q1:嵌套虛擬化問題

什么是嵌套 虛擬化特性?

我們知道,在Intel處理器上,Vitural box使用Intel的vmx(virtul machine eXtensions)來提高虛擬機(jī)性能, 即硬件輔助虛擬化技術(shù),

現(xiàn)在如果我們需要需要多臺具備"vmx"支持的主機(jī), 但是又沒有太多物理服務(wù)器可使用,

如果我們的虛擬機(jī)能夠和物理機(jī)一樣支持"vmx",那么問題就解決了,

而正常情況下,一臺虛擬機(jī)無法使自己成為一個hypervisors并在其上再次安裝虛擬機(jī),因為這些虛擬機(jī)并不支持"vmx", 此時,可以使用 嵌套式虛擬nested

嵌套式虛擬nested是一個可通過內(nèi)核參數(shù)來啟用的功能。

它能夠使一臺虛擬機(jī)具有物理機(jī)CPU特性,支持vmx或者svm(AMD)硬件虛擬化,

虛擬機(jī)啟用嵌套VT-x/AMD-V

嵌套 虛擬化特性在VirtualBox虛擬機(jī)中默認(rèn)是不啟用的(設(shè)置-系統(tǒng)-處理器):

minikube,java,kubernetes,java,容器

打開Windows Powershell,進(jìn)入VirtualBox安裝目錄,將要安裝minikube的虛擬機(jī)啟用嵌套VT-x/AMD-V。

# 進(jìn)入安裝目錄
cd 'C:\Program Files\Oracle\VirtualBox\'
 
# 列出所有虛擬機(jī)
C:\Program Files\Oracle\VirtualBox>.\VBoxManage.exe list vms
"cdh1" {309cd81a-248c-4184-9f99-8fe72d01c1f0}

 
# 打開嵌套虛擬化功能
.\VBoxManage.exe modifyvm "cdh1"  --nested-hw-virt on

啟用完成后可以看到界面中該選項已勾選:

minikube,java,kubernetes,java,容器

Q2:conntrack依賴

安裝conntrack(后面使用–driver=none啟動,依賴此包)

yum install conntrack -y

使用如下命令啟動minikube

minikube start --registry-mirror="https://na8xypxe.mirror.aliyuncs.com" --driver=none

使用–driver=none的好處是可以直接使用root運(yùn)行minikube,無需再配置其他用戶。

缺點(diǎn)是安全性降低、穩(wěn)定性降低、數(shù)據(jù)丟失風(fēng)險、無法使用–cpus、–memory進(jìn)行資源限制等等,

但這不是我們需要考慮的,因為本身安裝minikube就是測試學(xué)習(xí)用的。

關(guān)于driver的選擇,詳細(xì)可以參看:none | minikube (k8s.io)

啟動時我們看到如下報錯:

stderr:
error execution phase preflight: [preflight] Some fatal errors occurred:
        [ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`

根據(jù)提示進(jìn)行解決即可:

echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

再次嘗試啟動,啟動成功:

[root@test1 ~]# minikube start --registry-mirror="https://na8xypxe.mirror.aliyuncs.com" --driver=none
* minikube v1.18.1 on Centos 7.6.1810
* Using the none driver based on existing profile
* Starting control plane node minikube in cluster minikube
* Restarting existing none bare metal machine for "minikube" ...
* OS release is CentOS Linux 7 (Core)
* Preparing Kubernetes v1.20.2 on Docker 1.13.1 ...
  - Generating certificates and keys ...
  - Booting up control plane ...
  - Configuring RBAC rules ...
* Configuring local host environment ...
* 
! The 'none' driver is designed for experts who need to integrate with an existing VM
* Most users should use the newer 'docker' driver instead, which does not require root!
* For more information, see: https://minikube.sigs.k8s.io/docs/reference/drivers/none/
* 
! kubectl and minikube configuration will be stored in /root
! To use kubectl or minikube commands as your own user, you may need to relocate them. For example, to overwrite your own settings, run:
* 
  - sudo mv /root/.kube /root/.minikube $HOME
  - sudo chown -R $USER $HOME/.kube $HOME/.minikube
* 
* This can also be done automatically by setting the env var CHANGE_MINIKUBE_NONE_USER=true
* Verifying Kubernetes components...
  - Using image registry.cn-hangzhou.aliyuncs.com/google_containers/storage-provisioner:v4 (global image repository)
* Enabled addons: storage-provisioner, default-storageclass
* Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

Q3:依賴kubectl、kubelet

添加阿里云kubenetes yum源

# /etc/yum.repos.d/kubenetes.repo
[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

生成元數(shù)據(jù)緩存

# 生成元數(shù)據(jù)緩存
yum makecache

安裝kubectl、kubelet

yum install kubectl -y
yum install kubelet -y
systemctl enable kubelet



帶著版本安裝


yum list available kubectl

kubectl version


yum remove kubectl

yum install -y kubelet-1.23.1 kubectl-1.23.1 kubeadm-1.23.1

查看版本

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.1", GitCommit:"86ec240af8cbd1b60bcc4c03c20da9b98005b92e", GitTreeState:"clean", BuildDate:"2021-12-16T11:41:01Z", GoVersion:"go1.17.5", Compiler:"gc", Platform:"linux/amd64"}
The connection to the server localhost:8080 was refused - did you specify the right host or port?

Q4: 橋接問題

啟動時我們看到如下報錯:

stderr:error execution phase preflight: [preflight] Some fatal errors occurred:        [ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`

根據(jù)提示進(jìn)行解決即可:

echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

Q5:初始化失敗報錯,升級內(nèi)核

error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR SystemVerification]: unexpected kernel config: CONFIG_CGROUP_PIDS
[ERROR SystemVerification]: missing required cgroups: pids
[preflight] If you know what you are doing, you can make a check non-fatal with --ignore-preflight-errors=...
To see the stack trace of this error execute with --v=5 or higher
首先,你要在cat /boot/config-uname -r | grep CGROUP這個文件里面加CONFIG_CGROUP_PIDS=y,

然后你再升級一下內(nèi)核就可以了。

內(nèi)核升級參考

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
yum --enablerepo=elrepo-kernel install kernel-ml
cp /etc/default/grub  /etc/default/grub_bak
vi /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg
 systemctl enable docker.service
re

查看內(nèi)核版本

[root@cdh1 ~]# awk -F\' ' $1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (6.1.8-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-327.4.5.el7.x86_64) 7 (Core)
2 : CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)
3 : CentOS Linux (0-rescue-e147b422673549a3b4fda77127bd4bcd) 7 (Core)

編輯 /etc/default/grub 文件

設(shè)置 GRUB_DEFAULT=0,通過上面查詢顯示的編號為 0 的內(nèi)核作為默認(rèn)內(nèi)核:

(sed ‘s, release .*$,g’ /etc/system-release)"
GRUB_DEFAULT=0
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT=“console”
GRUB_CMDLINE_LINUX=“crashkernel=auto rd.lvm.lv=cl/root rhgb quiet”
GRUB_DISABLE_RECOVERY=“true”

生成 grub 配置文件并重啟
$ grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file …
Found linux image: /boot/vmlinuz-5.12.1-1.el7.elrepo.x86_64
Found initrd image: /boot/initramfs-5.12.1-1.el7.elrepo.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-1160.25.1.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1160.25.1.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-1160.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1160.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-16ba4d58b7b74338bfd60f5ddb0c8483
Found initrd image: /boot/initramfs-0-rescue-16ba4d58b7b74338bfd60f5ddb0c8483.img
done

$ reboot

查看內(nèi)核版本

$ uname -sr
Linux 6.1.8-1.el7.elrepo.x86_64

Q6:vboxsf 共享文件系統(tǒng)丟失

升級centos內(nèi)核后出現(xiàn)以下異常:

Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem “vboxsf” is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:

mount -t vboxsf -o uid=1000,gid=1000 vagrant /vagrant

The error output from the command was:

/sbin/mount.vboxsf: mounting failed with the error: No such device

解決方法一:
vagrant plugin install vagrant-vbguest

vagrant reload --provision

好像不行

解決方法2:

將kernel-devel也升級到

# yum --enablerepo=elrepo-kernel install kernel-lt-devel
yum  install kernel
yum install kernel-headers
yum install kernel-devel
yum install gcc* 
yum install make

安裝完成之后,執(zhí)行

/etc/init.d/vboxadd setup

minikube,java,kubernetes,java,容器

成功!

掛載共享目錄

mount -t vboxsf -o uid=0,gid=0,_netdev vagrant /vagrant
按照對應(yīng)的kernel-devel

LINUX中的kernel-devel工具是干什么的?

如果某個程序需要內(nèi)核提供的一些功能,它就需要內(nèi)核的 C header 來編譯程序,這個時候 linux-devel 里面的東西就用上了。

kernel-devel 不光是 C Header 文件,它還有內(nèi)核的配置文件,以及其他的開發(fā)用的資料。

區(qū)別:kernel-devel包只包含用于內(nèi)核開發(fā)環(huán)境所需的內(nèi)核頭文件以及Makefile,而kernel-souce包含所有內(nèi)核源代碼。

如果僅僅是用于你自己編寫的模塊開發(fā)的話,因為只需引用相應(yīng)的內(nèi)核頭文件,所以只有devel包即可,如果你要修改現(xiàn)有的內(nèi)核源代碼并重新編譯,那必須是kernel-souce。

kernel-souce在RH某些版本之后不再附帶在發(fā)行版中了,必須自己通過kernel-XXX.src.rpm做出來。

kernel-devel是用做內(nèi)核一般開發(fā)的,比如編寫內(nèi)核模塊,原則上,可以不需要內(nèi)核的原代碼。
kernel則是專指內(nèi)核本身的開發(fā),因此需要內(nèi)核的原代碼。

rpm 去
https://pkgs.org/download/kernel(list_del) 找 kernel-xxx.rpm
https://pkgs.org/download/kernel-devel 找 kernel-devel-xxxx.rpm

[root@cdh1 ~]# rpm -qa | grep kernel
kernel-devel-3.10.0-327.el7.x86_64
kernel-ml-6.1.8-1.el7.elrepo.x86_64
kernel-3.10.0-1160.83.1.el7.x86_64
kernel-tools-3.10.0-327.4.5.el7.x86_64
kernel-lt-devel-5.4.230-1.el7.elrepo.x86_64
kernel-tools-libs-3.10.0-327.4.5.el7.x86_64
kernel-3.10.0-327.4.5.el7.x86_64
kernel-devel-3.10.0-327.4.5.el7.x86_64
kernel-headers-3.10.0-1160.83.1.el7.x86_64
kernel-3.10.0-327.el7.x86_64
kernel-devel-3.10.0-1160.83.1.el7.x86_64


[root@cdh1 ~]# uname -sr
Linux 6.1.8-1.el7.elrepo.x86_64
[root@cdh1 ~]# awk -F\' ' $1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (6.1.8-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-327.4.5.el7.x86_64) 7 (Core)
2 : CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)
3 : CentOS Linux (0-rescue-e147b422673549a3b4fda77127bd4bcd) 7 (Core)

[root@cdh1 ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)

https://pkgs.org/download/kernel-devel 找 kernel-devel-xxxx.rpm

kernel-devel-6.1.8-1.el7.elrepo.x86_64.rpm

1.下載rpm ,網(wǎng)址

https://pkgs.org/download/kernel-devel

查看Install Howto 部分,進(jìn)入對應(yīng)網(wǎng)址,如

http://mirror.rackspace.com/elrepo/elrepo/el6/i386/RPMS/

下載對應(yīng)elrepo-release*rpm

kernel-ml-devel-6.1.8-1.el7.elrepo.x86_64.rpm CentOS 7, RHEL 7, Rocky Linux 7, AlmaLinux 7 Download (pkgs.org)

POD 容器的問題

K8s的常用命令

kubectl get pods -A 查看所有的命令空間下的pods

kubectl describe node 查看所有節(jié)點(diǎn)的cpu和內(nèi)存使用情況

kubectl describe node nodename |grep Taints 查看該節(jié)點(diǎn)是否可達(dá),是否可以部署內(nèi)容;一般三種情況

kubectl -n namespace名 logs -f --tail 200 pod名 -n namespace 查看命名空間下的 pods日志(運(yùn)行后才有日志,此命令查看實(shí)時的200條日志)

kubectl exec -it -n namespace名 pod名 sh 進(jìn)入pod

kubectl get services,pods -o wide 查看所有的pods和services, -o 輸出格式為wide或者yaml

kubectl describe pod pod名 -n namespace名 查看pod的描述狀態(tài)

kubectl describe job/ds/deployment pod名 -n namespace名 查看三個控制器下pod描述

kubectl exec -it pod名 -c 容器名 – /bin/bash

kubectl get pod pod名 -n namespace名 -oyaml | kubectl replace --force -f - 重啟pod命令

kubectl get pods -n namespace名

kubectl get pods pod名 -o yaml -n namespace名

kubectl get ds -n namespace名 查看命名空間下daemonset的信息

kubectl get ds ds名 -o yaml -n namespace名

kubectl get deployment -n namespace名

kubectl get deployment deployment名 -o yaml -n namespace名
后面加–force --grace-period=0;立刻強(qiáng)制刪除與下面的一起用

刪除當(dāng)前的應(yīng)用:kubectl delete ds daemonset名 -n namespace名、kubectl delete deployment deployment名 -n namespace名(備注:如果是沒刪除ds/deployment/job,直接刪除對應(yīng)的pod(kubectl delete pod pod名 -n namespace名,pod會一直重啟)

查看容器實(shí)時最新的10條日志 docker logs -f -t --tail 10 容器名

kubectl delete job jobname -n namespace名(job任務(wù)也是如此)

查看所有的pod,看看哪些有問題

kubectl get pods -A

[root@cdh1 ~]# kubectl get pods -A
NAMESPACE              NAME                                         READY   STATUS             RESTARTS   AGE
kube-system            coredns-6d8c4cb4d-grphf                      1/1     Running            0          8m16s
kube-system            etcd-cdh1                                    1/1     Running            1          8m29s
kube-system            kube-apiserver-cdh1                          1/1     Running            1          8m31s
kube-system            kube-controller-manager-cdh1                 1/1     Running            1          8m29s
kube-system            kube-proxy-78trt                             1/1     Running            0          8m16s
kube-system            kube-scheduler-cdh1                          1/1     Running            1          8m29s
kube-system            storage-provisioner                          0/1     ImagePullBackOff   0          8m28s
kubernetes-dashboard   dashboard-metrics-scraper-5496b5d99f-llh9t   0/1     ImagePullBackOff   0          6m28s
kubernetes-dashboard   kubernetes-dashboard-58b48666f8-hsn8g        0/1     ImagePullBackOff   0          6m28s

storage-provisioner 的ImagePullBackOff 狀態(tài)

kubectl get pods -A

kubectl describe pod XXX -n kube-system

通過kubectl describe命令詳細(xì)查看redis-master-0這個pod:

[root@cdh1 ~]# kubectl describe pod  storage-provisioner -n kube-system
Name:         storage-provisioner
Namespace:    kube-system
Priority:     0
Node:         cdh1/10.0.2.15
Start Time:   Sun, 29 Jan 2023 05:17:14 +0800
Labels:       addonmanager.kubernetes.io/mode=Reconcile
              integration-test=storage-provisioner
Annotations:  <none>
Status:       Pending
IP:           10.0.2.15
IPs:
  IP:  10.0.2.15
Containers:
  storage-provisioner:
    Container ID:
    Image:         registry.aliyuncs.com/google_containers/k8s-minikube/storage-provisioner:v5
    Image ID:
    Port:          <none>
    Host Port:     <none>
    Command:
      /storage-provisioner
    State:          Waiting
      Reason:       ImagePullBackOff
    Ready:          False
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /tmp from tmp (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-l5h2b (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  tmp:
    Type:          HostPath (bare host directory volume)
    Path:          /tmp
    HostPathType:  Directory
  kube-api-access-l5h2b:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason            Age                    From               Message
  ----     ------            ----                   ----               -------
  Warning  FailedScheduling  27m                    default-scheduler  0/1 nodes are available: 1 node(s) had taint {node.kubernetes.io/not-ready: }, that the pod didn't tolerate.
  Normal   Scheduled         27m                    default-scheduler  Successfully assigned kube-system/storage-provisioner to cdh1
  Normal   Pulling           26m (x4 over 27m)      kubelet            Pulling image "registry.aliyuncs.com/google_containers/k8s-minikube/storage-provisioner:v5"
  Warning  Failed            26m (x4 over 27m)      kubelet            Failed to pull image "registry.aliyuncs.com/google_containers/k8s-minikube/storage-provisioner:v5": rpc error: code = Unknown desc = Error response from daemon: pull access denied for registry.aliyuncs.com/google_containers/k8s-minikube/storage-provisioner, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
  Warning  Failed            26m (x4 over 27m)      kubelet            Error: ErrImagePull
  Warning  Failed            25m (x6 over 27m)      kubelet            Error: ImagePullBackOff
  Normal   BackOff           2m39s (x109 over 27m)  kubelet            Back-off pulling image "registry.aliyuncs.com/google_containers/k8s-minikube/storage-provisioner:v5"

dashboard-metrics-scraper-5496b5d99f-wj2d9

我們查看一下storage-provisioner pod的imagePullPolicy:

# kubectl get pod dashboard-metrics-scraper-5496b5d99f-wj2d9  -n kubernetes-dashboard -o yaml
... ...
spec:
  containers:
  - command:
    - /storage-provisioner
    image: registry.cn-hangzhou.aliyuncs.com/google_containers/k8s-minikube/storage-provisioner:v5
    imagePullPolicy: IfNotPresent
    name: storage-provisioner

我們發(fā)現(xiàn)storage-provisioner的imagePullPolicy為ifNotPresent,這意味著如果本地有storage-provisioner:v5這個鏡像的話,minikube不會再去遠(yuǎn)端下載該image。這樣我們可以先將storage-provisioner:v5下載到本地并重新tag為registry.cn-hangzhou.aliyuncs.com/google_containers/k8s-minikube/storage-provisioner:v5。

啟動Dashboard

使用如下命令啟動dashboard:

$ minikube addons enable dashboard
    ? Using image kubernetesui/dashboard:v2.3.1
    ? Using image kubernetesui/metrics-scraper:v1.0.7
   Some dashboard features require the metrics-server addon. To enable all features please run:

        minikube addons enable metrics-server


   The 'dashboard' addon is enabled

$ minikube addons enable metrics-server
    ? Using image k8s.gcr.io/metrics-server/metrics-server:v0.4.2
   The 'metrics-server' addon is enabled

$ minikube dashboard
   Verifying dashboard health ...
   Launching proxy ...
   Verifying proxy health ...
   Opening http://127.0.0.1:39887/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...
   http://127.0.0.1:39887/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/

直接用minikube addons啟動Dashboard,提示還需要一并啟用metrics-server,都enable下

終于啟動了

minikube,java,kubernetes,java,容器

[minikube@cdh1 root]$ kubectl get pod -A

minikube,java,kubernetes,java,容器

如何從宿主機(jī)也就是我們的Windows中訪問dashborad呢

從上面輸出的信息可以看到,dashboard綁定的IP地址為本地回環(huán)地址127.0.0.1,這意味著該地址只能在本地訪問。

虛擬機(jī)是沒有GUI的,那么如何從宿主機(jī)也就是我們的Windows中訪問dashborad呢?

可以進(jìn)行如下操作:

使用 nginx、openresty 進(jìn)行 反向代理

http://127.0.0.1:39887/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/


http://k8s:80/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/

直接使用

此時的minikube kubectl --就相當(dāng)于k8s里的kubectl命令,當(dāng)然我們實(shí)際不會這樣使用,

我們可以minikube的命令給alias一下:

$ alias kubectl="minikube kubectl --"

此時再直接運(yùn)行kubectl命令:

$ kubectl
kubectl controls the Kubernetes cluster manager.

 Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/

Basic Commands (Beginner):
  create        Create a resource from a file or from stdin
  expose        Take a replication controller, service, deployment or pod and expose it as a new
Kubernetes service
  run           在集群中運(yùn)行一個指定的鏡像
  set           為 objects 設(shè)置一個指定的特征

Basic Commands (Intermediate):
  explain       Get documentation for a resource
  get           顯示一個或更多 resources
  edit          在服務(wù)器上編輯一個資源
  delete        Delete resources by file names, stdin, resources and names, or by resources and
label selector
...

好了,就可以愉快的k8s玩耍了。

minikube重建

如果環(huán)境搞亂了想重新部署,很簡單就可以實(shí)現(xiàn)

$ minikube delete
$ minikube start --driver=docker // 這里指定了用docker,不指定也會自動檢測

docker-compose to minikube

需要將docker-compose.yaml轉(zhuǎn)變?yōu)閗8s deploy、svc、configmap,以swagger-ui為例

docker-compose.yaml

version: "3.0"
services:
  swiagger-ui:
    image: swaggerapi/swagger-ui
    container_name: swagger_ui_container
    ports:
      - "9092:8080"
    volumes:
      - ../docs/openapi:/usr/share/nginx/html/doc
    environment:
      API_URL: ./doc/api.yaml

k8s deploy、svc、configmap

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    io.minikube.service: swagger-ui
  name: swagger-ui
spec:
  replicas: 1
  selector:
    matchLabels:
      io.minikube.service: swagger-ui
  template:
    metadata:
      labels:
        io.minikube.service: swagger-ui
    spec:
      containers:
        - env:
            - name: SWAGGER_JSON
              value: /openapi/api.yaml
          image: swaggerapi/swagger-ui
          name: swagger-ui
          ports:
            - containerPort: 8080
          imagePullPolicy: IfNotPresent
          volumeMounts:
            - mountPath: /openapi
              name: swagger-ui-cm
      volumes:
        - name: swagger-ui-cm
          configMap:
            name: swagger-ui-cm

---
apiVersion: v1
kind: Service
metadata:
  name: swagger-ui
  labels:
    io.minikube.service: swagger-ui
spec:
  ports:
    - port: 8080
      protocol: TCP
      targetPort: 8080
  selector:
    io.minikube.service: swagger-ui

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: swagger-ui-cm
data:
  api.yaml: |
    openapi: 3.0.0
      version: "1.0"
...

遇到的問題

外部訪問問題

minikube內(nèi)的k8s網(wǎng)絡(luò)明顯與host不一樣,不論使用不使用Type=NodePort,都無法直接訪問,都需要用port-forward

這里查了些資料,可能的一個解釋是,minikube使用docker-machine為底層,實(shí)現(xiàn)可以部署到vm、container、host等基礎(chǔ)設(shè)施上,docker-machine會構(gòu)建自身的docker環(huán)境,與host不同,網(wǎng)絡(luò)也不在一個平面,所以使用NodePort,從host也無法訪問,需要借助kubectl port-forward --address=0.0.0.0 service/hello-minikube 7080:8080。

------------ 2021-11-26 update---------------

可以使用以下命令獲取minikube的ip,然后通過該ip+nodeport訪問

$ minikube ip
192.168.49.2

也可以通過一下命令直接獲取對應(yīng)service的url

$ minikube service hello-minikube --url
http://192.168.49.2:30660

pull image問題

minikube內(nèi)的docker daemon與host docker daemon不一樣,且k8s不與host上的docker共享信息,host上的docker images和daemon.json配置對minikube內(nèi)的docker daemon不可見,minikube內(nèi)的docker daemon總是從dockerhub pull image,會遇到

You have reached your pull rate limit. 
You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limits. 
You must authenticate your pull requests.

解決辦法

可以先用host docker pull images,然后load到minikube

$ docker pull <image name>
$ minikube image load <image name>

注意k8s默認(rèn)的imagePullPolicy

Default image pull policy
When you (or a controller) submit a new Pod to the API server, your cluster sets the imagePullPolicy field when specific conditions are met:
if you omit the imagePullPolicy field, and the tag for the container image is :latest, imagePullPolicy is automatically set to Always;
if you omit the imagePullPolicy field, and you don’t specify the tag for the container image, imagePullPolicy is automatically set to Always;
if you omit the imagePullPolicy field, and you specify the tag for the container image that isn’t :latest, the imagePullPolicy is automatically set to IfNotPresent.

  1. 如果沒有設(shè)置imagePullPolicy,但image tag是latest,那么默認(rèn)就是imagePullPolicy: Always
  2. 如果沒有設(shè)置imagePullPolicy,也沒有設(shè)置image tag,那么默認(rèn)也是imagePullPolicy: Always
  3. 如果設(shè)置了image tag,默認(rèn)imagePullPolicy: IfNotPresent

為了不出錯,建議直接指定imagePullPolicy: IfNotPresent

參考資料

Minikube - Kubernetes本地實(shí)驗環(huán)境-阿里云開發(fā)者社區(qū) (aliyun.com)

minikube start | minikube (k8s.io)

安裝Istio - 肖祥 - 博客園 (cnblogs.com)

https://cn.dubbo.apache.org/zh/overview/tasks/traffic-management/

Kubernetes入門,使用minikube 搭建本地k8s 環(huán)境 (bbsmax.com)

CentOS7下minikube的安裝 - 拾月凄辰 - 博客園 (cnblogs.com)

按照Kubernetes官網(wǎng)教程Installing kubeadm遇到的幾個大坑_阿里云__小魚塘-DevPress官方社區(qū) (csdn.net)

(14條消息) 如何在VirtualBox的CentOS虛擬機(jī)中安裝阿里云版本Minikube_灑滿陽光的午后的博客-CSDN博客_宿主機(jī)怎么訪問虛機(jī)中的minikube

7.我在B站學(xué)云原生之Kubernetes入門實(shí)踐基于containerd容器運(yùn)行時安裝部署K8S集群環(huán)境 - 嗶哩嗶哩 (bilibili.com)

(26條消息) centos升級系統(tǒng)內(nèi)核_centos 升級內(nèi)核_月夜楓的博客-CSDN博客

https://blog.csdn.net/m0_62948770/article/details/127678600

內(nèi)核升級

https://www.topunix.com/post-4883.html

https://blog.csdn.net/inthat/article/details/117074180

刪除舊內(nèi)核

https://blog.csdn.net/weixin_45661908/article/details/123377496

centos-8.2

https://app.vagrantup.com/bento/boxes/centos-8.2文章來源地址http://www.zghlxwxcb.cn/news/detail-779747.html

到了這里,關(guān)于輕量級 K8S 環(huán)境、本地 K8S 環(huán)境Minikube,一鍵使用 (史上最全)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【k8s】搭建小巧完備的Kubernetes環(huán)境(minikube)

    【k8s】搭建小巧完備的Kubernetes環(huán)境(minikube)

    容器技術(shù)的核心概念是容器、鏡像、倉庫,使用這三大基本要素我們就可以輕松地完成應(yīng)用的打包、分發(fā)工作,實(shí)現(xiàn)“一次開發(fā),到處運(yùn)行”的夢想。 不過,當(dāng)我們熟練地掌握了容器技術(shù),信心滿滿地要在服務(wù)器集群里大規(guī)模實(shí)施的時候,卻會發(fā)現(xiàn)容器技術(shù)的創(chuàng)新只是解決了

    2024年02月02日
    瀏覽(34)
  • 輕量級web開發(fā)框架:Flask本地部署及實(shí)現(xiàn)公網(wǎng)訪問界面

    輕量級web開發(fā)框架:Flask本地部署及實(shí)現(xiàn)公網(wǎng)訪問界面

    本篇文章講解如何在本地安裝Flask,以及如何將其web界面發(fā)布到公網(wǎng)上并進(jìn)行遠(yuǎn)程訪問。 Flask是目前十分流行的web框架,采用Python編程語言來實(shí)現(xiàn)相關(guān)功能。較其他同類型框架更為靈活、輕便、安全且容易上手。它可以很好地結(jié)合MVC模式進(jìn)行開發(fā),開發(fā)人員分工合作,小型團(tuán)

    2024年02月05日
    瀏覽(147)
  • 輕量級開源服務(wù)器Tomcat本地部署并將網(wǎng)頁發(fā)布到公網(wǎng)遠(yuǎn)程訪問

    輕量級開源服務(wù)器Tomcat本地部署并將網(wǎng)頁發(fā)布到公網(wǎng)遠(yuǎn)程訪問

    目錄 1.前言 2.本地Tomcat網(wǎng)頁搭建 2.1 Tomcat安裝 2.2 配置環(huán)境變量 2.3 環(huán)境配置 2.4 Tomcat運(yùn)行測試 2.5 Cpolar安裝和注冊 3.本地網(wǎng)頁發(fā)布 3.1.Cpolar云端設(shè)置 3.2 Cpolar本地設(shè)置 4.公網(wǎng)訪問測試 5.結(jié)語 前些天發(fā)現(xiàn)了一個巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大

    2024年02月04日
    瀏覽(35)
  • 輕量級web開發(fā)框架Flask本地部署及無公網(wǎng)ip遠(yuǎn)程訪問界面

    輕量級web開發(fā)框架Flask本地部署及無公網(wǎng)ip遠(yuǎn)程訪問界面

    本篇文章講解如何在本地安裝Flask,以及如何將其web界面發(fā)布到公網(wǎng)上并進(jìn)行遠(yuǎn)程訪問。 Flask是目前十分流行的web框架,采用Python編程語言來實(shí)現(xiàn)相關(guān)功能。較其他同類型框架更為靈活、輕便、安全且容易上手。它可以很好地結(jié)合MVC模式進(jìn)行開發(fā),開發(fā)人員分工合作,小型團(tuán)

    2024年02月04日
    瀏覽(87)
  • 開源輕量級分布式文件系統(tǒng)FastDFS本地部署并實(shí)現(xiàn)遠(yuǎn)程訪問服務(wù)器

    開源輕量級分布式文件系統(tǒng)FastDFS本地部署并實(shí)現(xiàn)遠(yuǎn)程訪問服務(wù)器

    FastDFS是一個開源的輕量級分布式文件系統(tǒng),它對文件進(jìn)行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負(fù)載均衡的問題。特別適合以文件為載體的在線服務(wù),如相冊網(wǎng)站、視頻網(wǎng)站等等。 FastDFS為互聯(lián)網(wǎng)量身定制,充分考

    2024年02月04日
    瀏覽(116)
  • 本地部署輕量級web開發(fā)框架Flask并實(shí)現(xiàn)無公網(wǎng)ip遠(yuǎn)程訪問開發(fā)界面

    本地部署輕量級web開發(fā)框架Flask并實(shí)現(xiàn)無公網(wǎng)ip遠(yuǎn)程訪問開發(fā)界面

    本篇文章主要講解如何在本地安裝Flask,以及如何將其web界面發(fā)布到公網(wǎng)進(jìn)行遠(yuǎn)程訪問。 Flask是目前十分流行的web框架,采用Python編程語言來實(shí)現(xiàn)相關(guān)功能。較其他同類型框架更為靈活、輕便、安全且容易上手。它可以很好地結(jié)合MVC模式進(jìn)行開發(fā),開發(fā)人員分工合作,小型團(tuán)

    2024年01月23日
    瀏覽(96)
  • DeepFace【部署 03】輕量級人臉識別和面部屬性分析框架deepface在Linux環(huán)境下服務(wù)部署(conda虛擬環(huán)境+docker)

    Anaconda的安裝步驟這里不再介紹,直接開始使用。 以下操作在虛擬環(huán)境 deepface 下執(zhí)行: 使用 yum install mesa-libGL.x86_64 命令會在Linux系統(tǒng)中安裝mesa-libGL包。這個包包含了Mesa 3D圖形庫的運(yùn)行時庫和DRI驅(qū)動。安裝mesa-libGL包后,系統(tǒng)將能夠支持OpenGL,這是一種用于渲染2D和3D矢量圖形

    2024年02月08日
    瀏覽(106)
  • 輕量級虛擬桌面基礎(chǔ)架構(gòu)(VDI) 從任何地方和任何設(shè)備進(jìn)行安全快速訪問,為混合云環(huán)境啟用遠(yuǎn)程工作

    輕量級虛擬桌面基礎(chǔ)架構(gòu)(VDI) 從任何地方和任何設(shè)備進(jìn)行安全快速訪問,為混合云環(huán)境啟用遠(yuǎn)程工作 交付具有成本效益且可擴(kuò)展的 VDI 保證安全快速的虛擬應(yīng)用程序和虛擬桌面 保護(hù)知識產(chǎn)權(quán) 支持全球合作 許多企業(yè)擁有混合計算基礎(chǔ)架構(gòu),其中某些應(yīng)用程序已遷移到云中,而

    2024年02月03日
    瀏覽(24)
  • k8s實(shí)現(xiàn)外部訪問minikube集群

    我們現(xiàn)在大家都知道了 minikube集群相當(dāng)于k8s的一個虛擬機(jī)。 同時pod每次消亡重建之后都會分配一個虛擬的ip,這個ip可供集群內(nèi)部訪問,但是如果要對外訪問呢? 我們可以給他暴露ip出來,但是如果pod宕機(jī)后重建ip就發(fā)生了變化,所以不能對pod進(jìn)行ip的暴露。 那應(yīng)該對什么進(jìn)行

    2024年02月03日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包