sudo install minikube-linux-amd64 /usr/local/bin/minikube
- 然后使用如下命令启动Minikube:
minikube start
-
如果你使用的是
root用户的话会无法启动并提示如下信息,那是因为Minikube不允许使用root权限启动,需要创建一个非root账号再启动; -
minikube v1.16.0 on Centos 7.6.1810
-
Automatically selected the docker driver
-
The "docker" driver should not be used with root privileges.
-
If you are running minikube within a VM, consider using --driver=none:
X Exiting due to DRV_AS_ROOT: The "docker" driver should not be used with root privileges.
- 这里创建了一个属于
docker用户组的macro用户,并切换到该用户;
创建用户
useradd -u 1024 -g docker macro
设置用户密码
passwd macro
切换用户
su macro
-
再次使用
minikube start命令启动Minikube,启动成功后会显示如下信息: -
To pull new external images, you may need to configure a proxy: minikube.sigs.k8s.io/docs/refere…
-
Preparing Kubernetes v1.20.0 on Docker 20.10.0 ...
- Generating certificates and keys ...
- Booting up control plane ...
- Configuring RBAC rules ...
- Verifying Kubernetes components...
- 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
Kubernetes的使用
创建集群
通过Minikube我们可以创建一个单节点的K8S集群,集群管理Master和负责运行应用的Node都部署在此节点上。
- 查看Minikube的版本号:
minikube version
minikube version: v1.16.0 commit: 9f1e482427589ff8451c4723b6ba53bb9742fbb1
- 查看kubectl的版本号,第一次使用会直接安装kubectl:
minikube kubectl version 复制代码
Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.0", GitCommit:"af46c47ce925f4c4ad5cc8d1fca46c7b77d13b38", GitTreeState:"clean", BuildDate:"2020-12-08T17:59:43Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.0", GitCommit:"af46c47ce925f4c4ad5cc8d1fca46c7b77d13b38", GitTreeState:"clean", BuildDate:"2020-12-08T17:51:19Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}
- 如果你想直接使用kubectl命令的话,可以将其复制到
/bin目录下去:
查找kubectl命令的位置
find / -name kubectl
找到之后复制到/bin目录下
cp /mydata/docker/volumes/minikube/_data/lib/minikube/binaries/v1.20.0/kubectl /bin/
直接使用kubectl命令
kubectl version
- 查看集群详细信息:
kubectl cluster-info
Kubernetes control plane is running at https://192.168.49.2:8443 KubeDNS is running at https://192.168.49.2:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
- 查看集群中的所有Node,可以发现Minikube创建了一个单节点的简单集群:
kubectl get nodes
NAME STATUS ROLES AGE VERSION minikube Ready control-plane,master 46m v1.20.0
部署应用
一旦运行了K8S集群,就可以在其上部署容器化应用程序。通过创建Deployment对象,可以指挥K8S如何创建和更新应用程序的实例。
- 指定好应用镜像并创建一个Deployment,这里创建一个Nginx应用:
kubectl create deployment kubernetes-nginx --image=nginx:1.10
-
创建一个Deployment时K8S会产生如下操作:
-
选择一个合适的Node来部署这个应用;
-
将该应用部署到Node上;
-
当应用异常关闭或删除时重新部署应用。
-
查看所有Deployment:
kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE kubernetes-nginx 1/1 1 1 21h
- 我们可以通过
kubectl proxy命令创建一个代理,这样就可以通过暴露出来的接口直接访问K8S的API了,这里调用了查询K8S版本的接口;
[macro@linux-local root]$ kubectl proxy Starting to serve on 127.0.0.1:8001 [root@linux-local ~]# curl http://localhost:8001/version { "major": "1", "minor": "20", "gitVersion": "v1.20.0", "gitCommit": "af46c47ce925f4c4ad5cc8d1fca46c7b77d13b38", "gitTreeState": "clean", "buildDate": "2020-12-08T17:51:19Z", "goVersion": "go1.15.5", "compiler": "gc", "platform": "linux/amd64" }
查看应用
通过对运行应用的Pod进行操作,可以查看容器日志,也可以执行容器内部命令。
- 查看K8s中所有Pod的状态:
kubectl get pods
NAME READY STATUS RESTARTS AGE kubernetes-nginx-78bcc44665-8fnnn 1/1 Running 1 21h
- 查看Pod的详细状态,包括IP地址、占用端口、使用镜像等信息;
kubectl describe pods
Name: kubernetes-nginx-78bcc44665-8fnnn Namespace: default Priority: 0 Node: minikube/192.168.49.2 Start Time: Tue, 05 Jan 2021 13:57:46 +0800 Labels: app=kubernetes-nginx pod-template-hash=78bcc44665 version=v1 Annotations: Status: Running IP: 172.17.0.7 IPs: IP: 172.17.0.7 Controlled By: ReplicaSet/kubernetes-nginx-78bcc44665 Containers: nginx: Container ID: docker://31eb1277e507ec4cf8a27b66a9f4f30fb919d17f4cd914c09eb4cfe8322504b2 Image: nginx:1.10 Image ID: docker-pullable://nginx@sha256:6202beb06ea61f44179e02ca965e8e13b961d12640101fca213efbfd145d7575 Port: Host Port: State: Running Started: Wed, 06 Jan 2021 09:22:40 +0800 Last State: Terminated Reason: Completed Exit Code: 0 Started: Tue, 05 Jan 2021 14:24:55 +0800 Finished: Tue, 05 Jan 2021 17:32:48 +0800 Ready: True Restart Count: 1 Environment: Mounts: /var/run/secrets/kubernetes.io/serviceaccount from default-token-dhr4b (ro) Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True Volumes: default-token-dhr4b: Type: Secret (a volume populated by a Secret) SecretName: default-token-dhr4b Optional: false QoS Class: BestEffort Node-Selectors: Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: 复制代码
- 将Pod的名称设置为环境变量,方便之后使用
$POD_NAME来应用Pod的名称:
export POD_NAME=kubernetes-nginx-78bcc44665-8fnnn
- 查看Pod打印的日志:
kubectl logs $POD_NAME
- 使用
exec可以在Pod的容器中执行命令,这里使用env命令查看环境变量:
kubectl exec $POD_NAME -- env 复制代码
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=kubernetes-nginx-78bcc44665-8fnnn KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1 KUBERNETES_SERVICE_HOST=10.96.0.1 KUBERNETES_SERVICE_PORT=443 KUBERNETES_SERVICE_PORT_HTTPS=443 KUBERNETES_PORT=tcp://10.96.0.1:443 KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443 KUBERNETES_PORT_443_TCP_PROTO=tcp KUBERNETES_PORT_443_TCP_PORT=443 NGINX_VERSION=1.10.3-1~jessie HOME=/root
- 进入容器内部并执行
bash命令,如果想退出容器可以使用exit命令:
kubectl exec -ti $POD_NAME -- bash
公开暴露应用
默认Pod无法被集群外部访问,需要创建Service并暴露端口才能被外部访问。
- 创建一个Service来暴露kubernetes-nginx这个Deployment:
kubectl expose deployment/kubernetes-nginx --type="NodePort" --port 80
- 查看K8S中所有Service的状态:
kubectl get services 复制代码
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 443/TCP 5h16m kubernetes-nginx NodePort 10.105.177.114 80:31891/TCP 5s
- 查看Service的详情,通过
NodePort属性可以得到暴露到外部的端口;
kubectl describe services/kubernetes-nginx
Name: kubernetes-nginx Namespace: default Labels: app=kubernetes-nginx Annotations: Selector: app=kubernetes-nginx Type: NodePort IP Families: IP: 10.106.227.54 IPs: 10.106.227.54 Port: 80/TCP TargetPort: 80/TCP NodePort: 30158/TCP Endpoints: 172.17.0.7:80 Session Affinity: None External Traffic Policy: Cluster Events:
- 通过CURL命令通过
Minikube IP:NodePort IP可以访问Nginx服务,此时将打印Nginx主页信息;
curl $(minikube ip):30158
Welcome to nginx! body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; }Welcome to nginx!
If you see this page, the nginx web server is successfully installed and working. Further configuration is required.
For online documentation and support please refer to
nginx.org.
Commercial support is available at
nginx.com.
Thank you for using nginx.
标签的使用
通过给资源添加Label,可以方便地管理资源(如Deployment、Pod、Service等)。
- 查看Deployment中所包含的Label;
kubectl describe deployment
Name: kubernetes-nginx Namespace: default CreationTimestamp: Tue, 05 Jan 2021 13:57:46 +0800 Labels: app=kubernetes-nginx Annotations: deployment.kubernetes.io/revision: 1 Selector: app=kubernetes-nginx Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 25% max unavailable, 25% max surge
- 通过Label查询Pod:
kubectl get pods -l app=kubernetes-nginx
NAME READY STATUS RESTARTS AGE kubernetes-nginx-78bcc44665-8fnnn 1/1 Running 1 21h
- 通过Label查询Service:
kubectl get services -l app=kubernetes-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes-nginx NodePort 10.106.227.54 80:30158/TCP 4m44s
- 给Pod添加Label:
kubectl label pod $POD_NAME version=v1
- 查看Pod的详细信息,可以查看Label信息:
kubectl describe pods $POD_NAME
Name: kubernetes-nginx-78bcc44665-8fnnn Namespace: default Priority: 0 Node: minikube/192.168.49.2 Start Time: Tue, 05 Jan 2021 13:57:46 +0800 Labels: app=kubernetes-nginx pod-template-hash=78bcc44665 version=v1
- 通过Label查询Pod:
kubectl get pods -l version=v1
- 通过Label删除服务:
kubectl delete service -l app=kubernetes-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 443/TCP 30h
可视化管理
Dashboard是基于网页的K8S用户界面。你可以使用Dashboard将容器应用部署到K8S集群中,也可以对容器应用排错,还能管理集群资源。
- 查看Minikube内置插件,默认情况下Dashboard插件未启用:
minikube addons list
|-----------------------------|----------|--------------|
| ADDON NAME | PROFILE | STATUS |
|---|---|---|
| dashboard | minikube | disabled |
| default-storageclass | minikube | enabled ✅ |
| ----------------------------- | ---------- | -------------- |
- 启用Dashboard插件:
minikube addons enable dashboard
- 开启Dashboard,通过
--url参数不会打开管理页面,并可以在控制台获得访问路径:
minikube dashboard --url
-
Verifying dashboard health ...
-
Launching proxy ...
-
Verifying proxy health ... http://127.0.0.1:44469/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/
-
要想从外部访问Dashboard,需要从使用kubectl设置代理才行,
--address设置为你的服务器地址;
kubectl proxy --port=44469 --address='192.168.5.94' --accept-hosts='^.*' &
- 从外部访问服务器需要开启防火墙端口;
切换到root用户
su -
开启端口
firewall-cmd --zone=public --add-port=44469/tcp --permanent
重启防火墙
firewall-cmd --reload
- 通过如下地址即可访问Dashboard:
- 查看K8S集群中的资源状态信息: