部署准备
- centos7服务器
- Docker最新版本
- https://kubernetes.io/docs/tasks/tools/install-minikube/
- https://kubernetes.io/docs/setup/learning-environment/minikube/
安装
第一步: 检查Linux是否支持虚拟化,请运行以下命令并验证输出是否为非空 。
[root@minikube ~]# grep -E --color 'vmx|svm' /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec arat spec_ctrl intel_stibp flush_l1d arch_capabilities
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec arat spec_ctrl intel_stibp flush_l1d arch_capabilities
使用的是VMware Workstation 虚拟出来的镜像, 如果上面验证的结果为空,需要在创建centos的虚拟机的时候进行编辑,处理器开启虚拟化功能:
第二步: 确保您已安装kubectl ,若没有则通过以下三种方式安装,选择其一即可。
①: 使用curl安装Kubectl二进制文件
# 1.使用命令下载最新版本 或 下载特定版本
# 最新版本
curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
# 特定版本, 执行了上面就不用再执行此处
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.16.0/bin/linux/amd64/kubectl
# 2.使kubectl二进制可执行
chmod +x ./kubectl
# 3.将二进制文件移到PATH中
sudo mv ./kubectl /usr/local/bin/kubectl
# 4.测试以确保您安装的版本是最新或特定的
kubectl version
上面执行最后一步 kubectl version 会出现:
[root@minikube ~]# kubectl version
Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.0", GitCommit:"70132b0f130acc0bed193d9ba59dd186f0e634cf", GitTreeState:"clean", BuildDate:"2019-12-07T21:20:10Z", GoVersion:"go1.13.4", Compiler:"gc", Platform:"linux/amd64"}
The connection to the server localhost:8080 was refused - did you specify the right host or port?
先不管继续之后的操作;
②: 使用本机软件包管理进行安装(使用的是aliyun 的镜像)
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
yum install -y kubectl
③: 快速安装(未尝试)
# 如果您使用的是Ubuntu或其他支持快照包管理器的Linux发行版,则可以将kubectl作为快照应用程序使用
# 1.切换到快照用户并运行安装命令
sudo snap install kubectl --classic
# 2.测试以确保您安装的版本是最新或特定的
kubectl version
第三步: 安装虚拟机监控程序
如果尚未安装管理程序,请立即安装以下之一:
-
KVM,也使用QEMU
注意: Minikube还支持--vm-driver=none在主机而非VM上运行Kubernetes组件的选项。使用此驱动程序需要Docker和Linux环境,但不需要管理程序。当使用none驱动程序时,建议使用Docker的apt安装。docker的快照安装不适用于minikube。
安装VirtualBox(可先忽略)
#下载 deb包
wget https://download.virtualbox.org/virtualbox/6.1.0/VirtualBox-6.1-6.1.0_135406_el7-1.x86_64.rpm
# 安装
yum install -y VirtualBox-6.1-6.1.0_135406_el7-1.x86_64.rpm
[root@minikube k8s]# /sbin/vboxconfig
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
This system is currently not set up to build kernel modules.
Please install the Linux kernel "header" files matching the current kernel
for adding new hardware support to the system.
The distribution packages containing the headers are probably:
kernel-devel kernel-devel-3.10.0-957.el7.x86_64
This system is currently not set up to build kernel modules.
Please install the Linux kernel "header" files matching the current kernel
for adding new hardware support to the system.
The distribution packages containing the headers are probably:
kernel-devel kernel-devel-3.10.0-957.el7.x86_64
There were problems setting up VirtualBox. To re-start the set-up process, run
/sbin/vboxconfig
as root. If your system is using EFI Secure Boot you may need to sign the
kernel modules (vboxdrv, vboxnetflt, vboxnetadp, vboxpci) before you can load
them. Please see your Linux system's documentation for more information.
yum install kernel-devel -y
第四步: 安装 minikube
- 使用软件包安装Minikube: 有针对Minikube的实验软件包 ; 可以从GitHub上Minikube的发行页面中找到Linux(AMD64)软件包 ;
- 通过直接下载安装Minikube.
如果您不是通过软件包安装的,则可以下载独立的二进制文件并使用
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \
&& chmod +x minikube
这是一种将Minikube可执行文件添加到您的路径的简单方法
sudo mkdir -p /usr/local/bin/
sudo install minikube /usr/local/bin/
第五步: 清理本地状态
如果以前安装过Minikube,然后运行 :
minikube start
并且, minikube start返回错误 :
machine does not exist
那么, 那么您需要清除minikube的本地状态 :
minikube delete
使用, 确认安装成功
这个简短的演示指导您如何在本地启动,使用和删除Minikube 。 请按照下面给出的步骤开始和探索Minikube 。
1. 启动Minikube并创建集群 :
# minikube start
minikube start --image-repository=registry.aliyuncs.com/google_containers --vm-driver=none
注意:google镜像需要翻墙,这里我们使用国内阿里镜像源。由于我们是在Centos虚拟机上做的测试,所以将设置 “vm-driver=none”
一旦minikube start 完成后,运行下面的命令检查集群的状态, 如果您的集群正在运行,则输出minikube status应类似于:
[root@minikube k8s]# minikube status
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
2. 现在,您可以使用kubectl与集群进行交互 :
让我们使用名为echoserver的现有映像创建一个Kubernetes部署,这是一个简单的HTTP服务器,并使用–port将其公开在端口8080上。
kubectl create deployment hello-minikube --image=registry.aliyuncs.com/google_containers/echoserver:1.10
3. 要访问hello-minikube部署,请将其作为服务公开 :
kubectl expose deployment hello-minikube --type=NodePort --port=8080
选项 "--type = NodePort" 指定服务的类型。
输出类似于以下内容:
service/hello-minikube exposed
4. hello-minikube Pod现在已启动,但是您必须等到Pod启动后才能通过公开的服务访问它。
检查Pod是否已启动并正在运行:
[root@minikube k8s]# kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-minikube-797f975945-rkmx6 0/1 ErrImagePull 0 4m20s
如果输出将状态显示为ContainerCreating,则仍在创建Pod:
NAME READY STATUS RESTARTS AGE
hello-minikube-3383150820-vctvh 0/1 ContainerCreating 0 3s
如果输出显示状态为正在运行,则表明Pod已启动并正在运行:
NAME READY STATUS RESTARTS AGE
hello-minikube-3383150820-vctvh 1/1 Running 0 13s
5. 获取公开服务的URL以查看服务详细信息 :
[root@minikube k8s]# minikube service hello-minikube --url
http://192.168.227.144:30284
6. 要查看本地集群的详细信息,请在浏览器中复制并粘贴作为输出获得的URL。
输出类似于以下内容:
Hostname: hello-minikube-7c77b68cff-8wdzq
Pod Information:
-no pod information available-
Server values:
server_version=nginx: 1.13.3 - lua: 10008
Request Information:
client_address=172.17.0.1
method=GET
real path=/
query=
request_version=1.1
request_scheme=http
request_uri=http://192.168.99.100:8080/
Request Headers:
accept=*/*
host=192.168.99.100:30674
user-agent=curl/7.47.0
Request Body:
-no body in request-
如果您不再希望服务和群集运行,则可以将其删除。
7. 删除hello-minikube服务 :
kubectl delete services hello-minikube
- 删除hello-minikube部署:
kubectl delete deployment hello-minikube
- 停止本地Minikube集群:
minikube stop
- 删除本地Minikube集群:
minikube delete
管理集群
一个简单的流程
kubectl create deployment hello --image=karthequian/helloworld:latest
kubectl expose deployment hello --type=NodePort --port=8080
# 查看pod的信息
kubectl get pod
# 查看service暴露出来的url
minikube service hello --url
# 检查服务
kubectl get svc
常用命令
kubectl get pod # 查询列表
kubectl get pods -o json # 查询列表, json 格式显示
kubectl describe pod PodName # 查询详细,描述命令
kubectl delete svc kubernetes-dashboard # 删除服务
kubectl get deployment # 查询部署
kubectl delete deployment hello # 删除
kubectl get pods --all-namespaces # 列出所有 namespace 中的所有 pod
kubectl get pods -o wide # 查看 pod 并显示详细信息
kubectl get services # 查看 service
启动集群
minikube start命令可用于启动集群。 该命令创建并配置运行单节点Kubernetes集群的虚拟机。 此命令还将配置您的kubectl安装程序以与此集群通信。
注意:
如果您使用Web代理,则需要将此信息传递给minikube start命令:
https_proxy=<my proxy> minikube start --docker-env http_proxy=<my proxy> --docker-env https_proxy=<my proxy> --docker-env no_proxy=192.168.99.0/24
不幸的是,仅设置环境变量是行不通的。
Minikube还会创建一个“ minikube”上下文,并将其设置为kubectl中的默认值。要切换回此上下文,请运行以下命令:
kubectl config use-context minikube
指定Kubernetes版本
您可以通过将–kubernetes-version字符串添加到minikube start命令中来指定供Minikube使用的Kubernetes版本。例如,要运行版本v1.17.0,应运行以下命令:
minikube start --kubernetes-version v1.17.0
指定VM驱动程序
您可以通过将–vm-driver=<enter_driver_name>标志添加到来更改VM驱动程序minikube start。例如,命令将是。
minikube start --vm-driver=<driver_name>
FAQ
1. 状态是 ImagePullBackOff
[root@minikube k8s]# kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-minikube-797f975945-rkmx6 0/1 ImagePullBackOff 0 22m
[root@minikube k8s]# kubectl describe pod hello-minikube-797f975945-rkmx6
找到 Events:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 26m default-scheduler Successfully assigned default/hello-minikube-797f975945-rkmx6 to minikube
Normal Pulling 24m (x4 over 26m) kubelet, minikube Pulling image "k8s.gcr.io/echoserver:1.10"
Warning Failed 24m (x4 over 26m) kubelet, minikube Failed to pull image "k8s.gcr.io/echoserver:1.10": rpc error: code = Unknown desc = Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
Warning Failed 24m (x4 over 26m) kubelet, minikube Error: ErrImagePull
Normal BackOff 24m (x6 over 26m) kubelet, minikube Back-off pulling image "k8s.gcr.io/echoserver:1.10"
Warning Failed 111s (x97 over 26m) kubelet, minikube Error: ImagePullBackOff
原因是被墙了, 可以尝试使用 docker pull xxx 拉取一个存在镜像
[root@minikube k8s]# kubectl create deployment hello --image=karthequian/helloworld:latest
deployment.apps/hello created
运行成功!
[root@minikube k8s]# kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-57c675fcdc-2mf52 1/1 Running 0 18s
…