centos7系统中安装minikube并部署应用
参考网址:
minikube 安装
https://mp.weixin.qq.com/s/XeH789bCzkihNJGXlzE2bA
minikube dashboard 界面安装使用
https://mp.weixin.qq.com/s?__biz=MzU1Nzg4NjgyMw==&mid=2247488842&idx=1&sn=259ef19f414d968748193df89a0a6c73&scene=21#wechat_redirect
说明:
参考
https://mp.weixin.qq.com/s/XeH789bCzkihNJGXlzE2bA
可以搭建好minikube我之前踩了很多坑,发现搭建总是失败 ,该片文章总结的非常好 ,基本按照步骤 ,可以搭建成功,
防止后面忘记 , 收藏记录一下
minikube简介
Minikube是由Kubernetes社区维护的单机版的Kubernetes集群,支持macOS、Linux和Windows等多种操作系统平台。Minikube使用最新的官方stable版本,并支持Kubernetes的大部分功能,从基础的容器编排管理,到高级特性如负载均衡、Ingress,权限控制等,非常适合作为Kubernetes入门,或开发测试环境使用。
关键词 入门
, 学习
,测试
环境准备
安装 minikube 基础环境
- centos7
- docker
- docker-compose
系统要求
CPU:至少两核
内存:至少2GB
安装
一)准备工作
1、 CentOS 7虚拟机配置
CPU:至少两核
内存:至少2GB
2、 创建操作系统用户
useradd user1 //创建账户
passwd user1 //设置密码
3、 安装需要的软件
yum install conntrack
yum install firefox
yum install xauth
yum install epel-release.noarch
yum install bash-completion.noarch //安装自动补全
4 、配置X11转发
vi /etc/ssh/sshd_config //修改下面的属性
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost no
保存退出
systemctl restart ssh //重启ssh服务
5、 安装docker
//更新软件
sudo yum update
//安装docker
sudo yum install docker
//启动docker服务
sudo systemctl start docker
//设置docker服务开机自动启动
sudo systemctl enable docker
//添加docker组,将当前用户加入该组
sudo groupadd docker
sudo usermod -aG docker user1
sudo systemctl restart docker
//需要切换下用户,生效配置
su root
su user1
6、 安装kubectl
//下载kubectl
sudo curl -LO “https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl”
//安装kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
//查看版本
kubectl version --client
//设置kubectl自动补全
kubectl completion bash >/etc/bash_completion.d/kubectl
//注销后重新登录,可以看到自动完成的效果
(二)安装和启动minikube
1、首先需要了解一些kubernetes的术语
1)Pod
Pod是Kubernetes运行的最小单位,一个Pod对应到一个应用。每个Pod都有一个yaml格式的配置文件。
一个Pod里面可以有一个或多个容器。
同一个Pod中的容器共享相同资源及网络。
2)deployment(部署)
deployment是Kubernetes 中的一个资源对象,用于描述应用的生命周期,比如应用使用的镜像、容器集数量,以及容器集更新方式。deployment完全由 Kubernetes 后端管理,整个更新过程在服务器端执行,无需客户端干预。
3)service(服务)
容器是短暂的,重启时其IP地址可能会改变,因此使用service建立前端容器与后台容器之间的对应关系。
4)node(节点)
node是Kubernetes运行的最小硬件单位,一个节点对应一台机器。kubernetes有worker node和master node两种节点,但minikube只有master节点。
5)label(标签)
Label是attach到Pod的一对键/值对,用来传递用户定义的属性。通过label来对pod进行区分和定位。
6)cluster(集群)
clster是Kubernetes中多个Node与Master的集合。
2、 安装minikube
//下载安装程序
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-latest.x86_64.rpm
//本地安装
sudo rpm -ivh minikube-latest.x86_64.rpm
3、 查看minikube的版本
minikube version
版本为1.20.0
4、 启动minikube集群
//普通用户身份启动集群
minikube start
minikube自动创建虚拟机作为节点(node),在该虚拟机中安装docker并下载镜像。
5、 查看minikube状态
minikube status
6、 查看集群信息
kubectl cluster-info //查看集群的详细信息和健康状态
7、 查看minikube创建的节点
//查看节点
kubectl get nodes
minikube只创建一个节点,节点的名称为minikube,角色为master。
//查看节点的详情
kubectl get node -o wide
可以看到node的名称、状态、内部IP地址、操作系统类型、内核版本、容器运行时版本等。
//登录到node中,口令也是root
ssh root@192.168.49.2
至此,minikube安装完成。
需要说明的是,minikube创建的环境所使用的docker守护进程与宿主机上的docker守护进程不同,所以在宿主机上执行docker ps看不到kubernetes集群中的容器实例。
exit //退出minikube创建的虚拟机
三、在minikube集群中部署应用
Kubernetes管理集群资源的唯一入口是调用apiserver的接口。kubectl是官方的CLI命令行工具,用于与apiserver进行通信,将用户在命令行输入的命令组织并转化为apiserver能识别的信息,进而管理Kubernetes各种资源。
(一)部署应用
1、 命令行方式部署应用
(1) 创建deployment
kubectl create deployment nginx --image=nginx
//查看deployment
kubectl get deployments
deplyment创建成功。
(2) 创建服务
//使用kubectl expose命令创建服务
kubectl expose deployment nginx --type=NodePort --port=80 --target-port=80 --name=nginx-service
//也可以使用kubectl create service命令创建服务
kubectl create service nodeport nginx --tcp 80:80
//查看服务
kubectl get service
service创建成功。
(3) 设置端口转发
kubectl port-forward service/nginx-service 8080:80
将CentOS虚拟机的8080端口转发到minikube节点的80端口
(4) 访问应用
在CentOS 7虚拟机中使用浏览器访问本地8080端口
可看到nginx的欢迎界面:
2、 使用yaml文件部署应用
(1) 生成deployment的yaml文件
//下面的命令只生成文件,不会真的创建deployment
kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4 --dry-run=client -o yaml > hello.yaml
//nginx.yaml文件的内容:
apiVersion: apps/v1 #API对象版本
kind: Deployment #资源类型,区分大小写
metadata:
creationTimestamp: null
labels:
app: hello-minikube
name: hello-minikube #当前Deployment对象名称,同一个命名空间下必须唯一
spec:
replicas: 1 #指定Pod数量
selector: #选择器,定义了Deployment如何找到要管理的Pod
matchLabels: #匹配标签
app: hello-minikube #待匹配的标签键值对
strategy: {}
template: #Pod模板定义
metadata:
creationTimestamp: null
labels: #Pod标签
app: hello-minikube #定义Pod标签,由键值对组成
spec: #Pod规范
containers: #容器列表,Pod中至少有一个容器
- image: k8s.gcr.io/echoserver:1.4 #镜像名称
name: echoserver #容器名称
resources: {}
status: {}
以上是文件内容。我们可以针对文件内容进行更改,使其满足需要。
(2) 应用yaml文件,创建deployment
kubectl apply -f hello.yaml
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wHZujFkz-1641216143006)(C:\Users-\AppData\Roaming\Typora\typora-user-images\image-20220103211205328.png)]
deployment创建成功。
(3) 生成service的yaml文件
//下面的命令只生成文件,不会真的创建service
kubectl create service nodeport hello-minikube --tcp 8080:8080 --dry-run=client -o yaml > hello-service.yaml
//nginx-service.yaml文件的内容
apiVersion: v1
kind: Service #资源类型为服务
metadata:
creationTimestamp: null
labels:
app: hello-minikube
name: hello-minikube
spec:
ports:
- name: 8080-8080
port: 8080
protocol: TCP
targetPort: 8080
selector:
app: hello-minikube
type: NodePort
status:
loadBalancer: {}
以上是nginx-service.yaml文件的内容,可根据需要对其进行更改。
(4) 应用yaml文件,创建service
kubectl apply -f hello-service.yaml
service创建成功
(5) 设置端口转发
kubectl port-forward service/hello-minikube 1080:8080
(6) 访问应用
在CentOS 7虚拟机中使用浏览器访问本地1080端口
firefox 127.0.0.1:1080
(二)kubectl查看类命令
1、 查看kubectl版本
kubectl version
分别输出了客户端和服务端的版本。
2、 查看集群信息
(1) 查看集群信息
kubectl cluster-info
输出了访问kubernetes控制平面和KubeDNS的URL。
(2) 查看名称空间
kubectl get namespaces
存在多个名称空间,其中default名称空间用于部署用户的应用程序。
(3) 查看节点
kubectl get nodes
minikube 只有一个节点。
3、 查看deployment的信息
(1) 查看deployment、服务和pod
kubectl get pods,deployment,svc
未指定名称空间,则显示default名称空间的资源。
4、 查看pod信息
(1) 查看pod和所在的node
kubectl get pods -o wide
minikube只有一个node。
(2) 查看全部名称空间中的pod
kubectl get pod -A
(3) 查看pod的环境变量
kubectl exec nginx-6799fc88d8-jl6hn env
(4) 查看指定pod的日志
kubectl logs -f --tail 500 -n default hello-minikube-6ddfcc9757-srq2p
(5) 查看异常的pod
kubectl get pods -A | grep -v Running
5、 查看service信息
(1) 查看所有名称空间的service信息
kubectl get service -A
(三)kubectl操作类命令
1、 进入容器
//查看pod
kubectl get pod | grep nginx
//因pod中只有一个容器,可直接进入容器
kubectl exec -it nginx-5bb6c97bfd-t9hcj -n default /bin/sh
//在容器中执行命令但不进入容器的shell
kubectl exec nginx-5bb6c97bfd-t9hcj – ls /
2、 设置标签
//为指定节点添加标签
kubectl label nodes minikube zone=qianxin
//查看节点标签
kubectl get node --show-labels
//通过标签查找节点
kubectl get node -l zone=qianxin
//删除节点的标签
kubectl label nodes minikube zone-
//为指定pod添加标签
kubectl label pod nginx-6799fc88d8-jl6hn -n default role-name=test
//查看pod的标签
kubectl get pod nginx-6799fc88d8-jl6hn -o yaml | grep role-name
//修改pod的标签值
kubectl label pod nginx-6799fc88d8-jl6hn -n default role-name=dev --overwrite
//删除pod的标签
kubectl label pod nginx-6799fc88d8-jl6hn -n default role-name-
3、 限制资源使用
//将deployment的nginx容器cpu限制为300m,将内存限制为512Mi
kubectl set resources deployment nginx -c=nginx --limits=cpu=300m,memory=512Mi
4、 编辑配置文件
//编辑指定pod的配置文件
kubectl edit pods nginx-5bb6c97bfd-t9hcj
//编辑指定deployment的配置文件
kubectl edit deployment nginx
(四)删除应用
1、 停止转发
ctrl-c即可停止
2、 删除service
kubectl delete service nginx-service
3、 删除deployments
kubectl delete deployments/nginx
删除deployment之后pod自然就被删除了。
注意,在尚未删除deployment的情况下,pod可能无法被删除。
//也可以同时删除deployment和服务
kubectl delete deployments/nginx services/nginx-service
4、 通过删除配置文件来删除对应的资源对象
//删除deployment
kubectl delete -f hello.yaml
//删除服务
kubectl delete -f hello-service.yaml
deployment和service都被删除了。
(五)可视化管理
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:
http://192.168.5.94:44469/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/
- 查看K8S集群中的资源状态信息:
oard
- 开启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:
http://192.168.5.94:44469/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/
- 查看K8S集群中的资源状态信息:
![image-20220103212033285](https://www.icode9.com/i/ll/?i=img_convert/f3f60b1d00c2c8d14dd3177a199fff7f.png)