Introduce
Minikube For fast local setup Kubernetes Single node cluster environment , It does not require too much hardware resources , It is convenient for developers to learn and try , Or daily development .
It supports most of kubernetes The function of , The list is as follows
- DNS
- NodePorts
- ConfigMaps and Secrets
- Dashboards
- Container Runtime: Docker, and rkt
- Enabling CNI (Container Network Interface)
- Ingress
- ...
Minikube Support Windows、macOS、Linux Three OS, Depending on the platform , Download the corresponding virtual machine image , And install it in the mirror k8s.
The current virtual machine technology is based on Hypervisor To achieve ,Hypervisor A unified virtual layer interface is defined , thus Minikube You can seamlessly switch between different virtual machine implementations , Such as macOS Switchable hyperkit or VirtualBox, Windows You can switch Hyper-V or VirtualBox etc. .
Virtual machine switching can be done through --vm-driver Realization , Such as minikube start --vm-driver hyperkit/ minikube start --vm-driver hyperv
If Minikube Installed in the kernel, it supports LXC Of OS Inside , Such as Ubuntu etc. , Installing the virtual machine again is obviously a waste of resources ,Minikube Provides direct docking OS The way down there
-
driver!=none mode
In this case minikube provisions a new docker-machine (Docker daemon/Docker host) using any supported providers. For instance: a) local provider = your Windows/Mac local host: it frequently uses VirtualBox as a hypervisor, and creates inside it a VM based on boot2docker image (configurable). In this case k8s bootstraper (kubeadm) creates all Kubernetes components inside this isolated VM. In this setup you have usually two docker daemons, your local one for development (if you installed it prior), and one running inside minikube VM. b) cloud hosts - not supported by minikube
-
driver=none mode
In this mode, your local docker host is re-used. In case no.1 there will be a performance penalty, because each VM generates some overhead, by running several system processes required by VM itself, in addition to those required by k8s components running inside VM. I think driver-mode=none is similar to " HYPERLINK "https://blog.alexellis.io/be-kind-to-yourself/"kind" version of k8s boostraper, meant for doing CI/integration tests.
Minikube install
download Minikube
curl -Lo minikube https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.13.0/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
download Kubectl
curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/
start-up Minikube
Launch parameters
Start command :minikube start " Parameters "
- --image-mirror-country cn Will default to use registry.cn-hangzhou.aliyuncs.com/google_containers As an installation Kubernetes The container image warehouse of ,
- --iso-url=*** Use Alibaba cloud's image address to download the corresponding .iso file
- --cpus=2: by minikube Virtual machine allocation CPU Check the number
- --memory=2000mb: by minikube The number of memory allocated by the virtual machine
- --kubernetes-version=***: minikube Virtual machines will use kubernetes edition ,e.g. --kubernetes-version v 1.17.3
- --docker-env http_proxy Delivery agent address
The default startup uses VirtualBox drive , Use --vm-driver Parameters can specify other drivers
# https://minikube.sigs.k8s.io/docs/drivers/
- --vm-driver=none It means to use a container ;
- --vm-driver=virtualbox It means virtual machine ;
Be careful : 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
Example
--vm-driver=kvm2
Reference resources : 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
# Create based on Hyper-V Of Kubernetes Test environment
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
sudo minikube start --vm-driver=none --docker-env http_proxy=http://$host_IP:8118 --docker-env https_proxy=https:// $host_IP:8118
among $host_IP refer to host Of IP, Can pass ifconfig see ; For example, my machine is 10.0.2.15, use virtualbox Deploy , Start with the following command 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
Minikube Status view
To start over , Will run a single node Kubernetes colony .Minikube Have also put kubectl Good configuration , So you don't have to do extra work to manage the container .
Minikube Create a Host-Only( Host only mode ) Network interface , Through this interface, you can route to nodes . If you want to run with pods or services Interact , You should send traffic through this address . Use minikube ip
The command can view this address :
Minikube Use
The user to use Minikube CLI Manage... On virtual machines Kubernetes Environmental Science , such as : start-up , stop it , Delete , Get status, etc . once Minikube Virtual machine start , Users can use familiar Kubectl CLI stay Kubernetes Perform operations on the cluster
# View all the resources in the cluster
kubectl get all
# Enter the node server
minikube ssh
# Execute node server commands , For example, view nodes docker info
minikube ssh -- docker info
# Delete cluster , Delete ~/.minikube Directory cached files
minikube delete
# Shut down the cluster
minikube stop
## Destroy cluster
minikube stop && minikube delete
Minikube plug-in unit
sudo minikube addons list
Minikube Integrated by default Kubernetes Dashboard. perform minikube dashboard
After the command , The browser will open by default
Installation problems
problem -1
Failed to save config: failed to acquire lock for /root/.minikube/profiles/minikube/config.json: unable to open /tmp/juju-mk270d1b5db5965f2dc9e9e25770a63417031943: permission denied
terms of settlement :
sudo rm -rf /tmp/juju-mk*
sudo rm -rf /tmp/minikube.*
problem -2
unable to read client-cert /root/.minikube/client.crt for minikube due to open /root/.minikube/client.crt: permission denied
unable to read client-key /root/.minikube/client.key for minikube due to open /root/.minikube/client.key: permission denied
unable to read certificate-authority /root/.minikube/ca.crt for minikube due to open /root/.minikube/ca.crt: permission denied
terms of settlement :
minikube stop
minikube delete
rm -rf ~/.kube
rm -rf ~/.minikube
sudo rm -rf /var/lib/minikube
sudo rm /var/lib/kubeadm.yaml
sudo rm -rf /etc/kubernetes
Reference resources :https://stackoverflow.com/questions/58541104/minikube-wont-work-after-ubuntu-upgrade-to-19-10
problem -3
Error restarting cluster: restarting kube-proxy: waiting for kube-proxy to be up for configmap update: timed out waiting for the condition
adopt minikube delete,minikube start Can solve
Deploy the application
$ kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.10 --port=8080
deployment.apps/hello-minikube created
# To access the application
$ kubectl expose deployment hello-minikube --type=NodePort
service/hello-minikube exposed
# Get service address
$ minikube service hello-minikube --url
http://192.168.99.105:30555