环境配置:
2 个 CPU 或更多 2GB 可用内存 20GB 可用磁盘空间 网络连接 容器或虚拟机管理器,例如:Docker、Hyperkit、Hyper-V、KVM、Parallels、Podman、VirtualBox或VMware Fusion/Workstation
在使用minikube之前,先安装docker
1、安装docker
# 卸载可能已安装的旧版本docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 安装一些工具
sudo yum install -y yum-utils
# 设置镜像仓库,这个仓库是国外的
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 阿里云镜像仓库
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新软件包索引
yum makecache fast
# 安装
sudo yum install docker-ce docker-ce-cli containerd.io
# 启动docker
systemctl start docker
# 查看版本,确认安装成功
docker version
创建root权限账户
# 添加用户
adduserminikube
# 添加密码
passwd minikube
# 赋予root权限,要修改sudoers文件,我们先需要赋予它write权限。然后再修改
chmod -v u+w /etc/sudoers
# 编辑文件
vim /etc/sudoers
# 编辑sudoers文件时,找到下面的内容,其中minikube ALL=(ALL) ALL是需要添加的
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
minikube ALL=(ALL) ALL
# 收回权限
chmod -v u-w /etc/sudoers
# Add your user to the 'docker' group
sudo usermod -aG docker minikubes && newgrp docker
注意:若是用root账户,在启动minikube时,会提示添加 --force,添加这个配置,可能会存在问题(本人未测试)。建议创建一个root权限的账户,而不是直接使用root。
2、安装minikube
要使用二进制下载在x86-64 Linux上安装最新的 minikube稳定版本:
# 切换到minikube账户
sudo minikube
# 下载
sudo curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
# 安装
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# 查看minikube版本
minikube version
# kubectl安装
minikube kubectl
# 使用命令 minikube start 会从 Docker Hub 上拉取镜像,以当前最新版本的 Kubernetes 启动集群
minikube start --image-mirror-country='cn' --driver=docker --kubernetes-version=v1.23.3
# 执行上述命令后,输出如下:
😄 minikube v1.26.1 on Centos 7.5.1804 (amd64)
✨ Using the docker driver based on user configuration
✅ Using image repository registry.cn-hangzhou.aliyuncs.com/google_containers
📌 Using Docker driver with root privileges
👍 Starting control plane node minikube in cluster minikube
🚜 Pulling base image ...
> registry.cn-hangzhou.aliyun...: 386.61 MiB / 386.61 MiB 100.00% 7.26 Mi
> registry.cn-hangzhou.aliyun...: 0 B [_____________________] ?% ? p/s 34s
🔥 Creating docker container (CPUs=2, Memory=2200MB) ...
> kubelet.sha256: 64 B / 64 B [-------------------------] 100.00% ? p/s 0s
> kubeadm.sha256: 64 B / 64 B [-------------------------] 100.00% ? p/s 0s
> kubectl.sha256: 64 B / 64 B [-------------------------] 100.00% ? p/s 0s
> kubeadm: 43.12 MiB / 43.12 MiB [-------------] 100.00% 5.04 MiB p/s 8.8s
> kubectl: 44.43 MiB / 44.43 MiB [--------------] 100.00% 4.06 MiB p/s 11s
> kubelet: 118.75 MiB / 118.75 MiB [------------] 100.00% 7.05 MiB p/s 17s
▪ Generating certificates and keys ...
▪ Booting up control plane ...
▪ Configuring RBAC rules ...
🔎 Verifying Kubernetes components...
▪ Using image registry.cn-hangzhou.aliyuncs.com/google_containers/storage-provisioner:v5
🌟 Enabled addons: default-storageclass, storage-provisioner
💡 kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'
🏄 Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
3、与您的集群交互
您还可以通过将以下内容添加到您的 shell 配置中来使您的生活更轻松:
alias kubectl="minikube kubectl --"
注意:在kubectl安装好之后,直接使用kubectl时,会提示命令不存在,而是需要使用minikube kubectl …,解决此问题的方法是
vi ~/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
alias kubectl="minikube kubectl --"
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
source ~/.bash_profile
如果您已经安装了 kubectl,您现在可以使用它来访问您闪亮的新集群
# minikube 状态查询
[minikube@docker ~]$ minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
[minikube@docker ~]$ minikube node list
minikube 192.168.49.2
[minikube@docker ~]$
# 使用kubectl创建k8s。先查看kubectl的版本
[minikube@docker ~]$ minikube kubectl -- version
Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.3", GitCommit:"816c97ab8cff8a1c72eccca1026f7820e93e0d25", GitTreeState:"clean", BuildDate:"2022-01-25T21:25:17Z", GoVersion:"go1.17.6", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.3", GitCommit:"816c97ab8cff8a1c72eccca1026f7820e93e0d25", GitTreeState:"clean", BuildDate:"2022-01-25T21:19:12Z", GoVersion:"go1.17.6", Compiler:"gc", Platform:"linux/amd64"}
[minikube@docker ~]$
[minikube@docker ~]$ kubectl get po -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-65c54cc984-l2hq5 1/1 Running 0 35m
kube-system etcd-minikube 1/1 Running 0 35m
kube-system kube-apiserver-minikube 1/1 Running 0 35m
kube-system kube-controller-manager-minikube 1/1 Running 0 35m
kube-system kube-proxy-mlngh 1/1 Running 0 35m
kube-system kube-scheduler-minikube 1/1 Running 0 35m
kube-system storage-provisioner 1/1 Running 1 (35m ago) 35m
kubernetes-dashboard dashboard-metrics-scraper-7db978b848-z2h2d 1/1 Running 0 18m
kubernetes-dashboard kubernetes-dashboard-6f4c897964-98m7r 1/1 Running 0 18m
[minikube@docker ~]$
或者,minikube 可以下载适当版本的 kubectl,您应该可以像这样使用它:
[minikube@docker ~]$ minikube kubectl -- get po -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-65c54cc984-l2hq5 1/1 Running 0 36m
kube-system etcd-minikube 1/1 Running 0 36m
kube-system kube-apiserver-minikube 1/1 Running 0 36m
kube-system kube-controller-manager-minikube 1/1 Running 0 36m
kube-system kube-proxy-mlngh 1/1 Running 0 36m
kube-system kube-scheduler-minikube 1/1 Running 0 36m
kube-system storage-provisioner 1/1 Running 1 (35m ago) 36m
kubernetes-dashboard dashboard-metrics-scraper-7db978b848-z2h2d 1/1 Running 0 18m
kubernetes-dashboard kubernetes-dashboard-6f4c897964-98m7r 1/1 Running 0 18m
[minikube@docker ~]$
最初,某些服务(例如 storage-provisioner)可能尚未处于运行状态。这是集群启动期间的正常情况,并且会立即自行解决。为了进一步了解您的集群状态,minikube 捆绑了 Kubernetes Dashboard,让您可以轻松适应新环境:
[minikube@docker ~]$ minikube dashboard
🔌 Enabling dashboard ...
▪ Using image docker.io/kubernetesui/dashboard:v2.7.0
▪ Using image docker.io/kubernetesui/metrics-scraper:v1.0.8
💡 Some dashboard features require the metrics-server addon. To enable all features please run:
minikube addons enable metrics-server
🤔 Verifying dashboard health ...
🚀 Launching proxy ...
🤔 Verifying proxy health ...
🎉 Opening http://127.0.0.1:41597/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...
👉 http://127.0.0.1:41597/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/
4、部署应用程序
创建一个示例部署并在端口 8080 上公开它:
kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4
kubectl expose deployment hello-minikube --type=NodePort --port=8080
kubectl run myngx --image=nginx:alpine
这可能需要一点时间,但是当您运行时,您的部署将很快出现:
kubectl get services hello-minikube
kubectl describe pod ***
访问此服务的最简单方法是让 minikube 为您启动 Web 浏览器:
minikube service hello-minikube
或者,使用 kubectl 转发端口:
kubectl port-forward service/hello-minikube 7080:8080
现在可以使用http://localhost:7080/访问
5、管理您的集群
#在不影响已部署应用程序的情况下暂停 Kubernetes:
minikube pause
#取消暂停暂停的实例:
minikube unpause
#停止集群:
minikube stop
#增加默认内存限制(需要重新启动):
minikube config set memory 16384
#浏览易于安装的 Kubernetes 服务目录:
minikube addons list
#创建第二个运行旧 Kubernetes 版本的集群:
minikube start -p aged --kubernetes-version=v1.16.1
#删除所有 minikube 集群:
minikube delete --all
6、常用命令
# 部署应用
kubectl apply -f app.yaml
# 查看 deployment
kubectl get deployment
# 查看 pod
kubectl get pod -o wide
# 查看 pod 详情
kubectl describe pod pod-name
# 查看 log
kubectl logs pod-name
# 进入 Pod 容器终端, -c container-name 可以指定进入哪个容器。
kubectl exec -it pod-name -- bash
# 伸缩扩展副本
kubectl scale deployment test-k8s --replicas=5
# 把集群内端口映射到节点
kubectl port-forward pod-name 8090:8080
# 查看历史
kubectl rollout history deployment test-k8s
# 回到上个版本
kubectl rollout undo deployment test-k8s
# 回到指定版本
kubectl rollout undo deployment test-k8s --to-revision=2
# 删除部署
kubectl delete deployment test-k8s
# 查看全部
kubectl get all
# 重新部署
kubectl rollout restart deployment test-k8s
# 命令修改镜像,--record 表示把这个命令记录到操作历史中
kubectl set image deployment test-k8s test-k8s=ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v2-with-error --record
# 暂停运行,暂停后,对 deployment 的修改不会立刻生效,恢复后才应用设置
kubectl rollout pause deployment test-k8s
# 恢复
kubectl rollout resume deployment test-k8s
# 输出到文件
kubectl get deployment test-k8s -o yaml >> app2.yaml
# 删除全部资源
kubectl delete all --all