通过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/proxyTo 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-nginxpod-template-hash=78bcc44665version=v1
Annotations:  <none>
Status:       Running
IP:           172.17.0.7
IPs:IP:           172.17.0.7
Controlled By:  ReplicaSet/kubernetes-nginx-78bcc44665
Containers:nginx:Container ID:   docker://31eb1277e507ec4cf8a27b66a9f4f30fb919d17f4cd914c09eb4cfe8322504b2Image:          nginx:1.10Image ID:       docker-pullable://nginx@sha256:6202beb06ea61f44179e02ca965e8e13b961d12640101fca213efbfd145d7575Port:           <none>Host Port:      <none>State:          RunningStarted:      Wed, 06 Jan 2021 09:22:40 +0800Last State:     TerminatedReason:       CompletedExit Code:    0Started:      Tue, 05 Jan 2021 14:24:55 +0800Finished:     Tue, 05 Jan 2021 17:32:48 +0800Ready:          TrueRestart Count:  1Environment:    <none>Mounts:/var/run/secrets/kubernetes.io/serviceaccount from default-token-dhr4b (ro)
Conditions:Type              StatusInitialized       True Ready             True ContainersReady   True PodScheduled      True
Volumes:default-token-dhr4b:Type:        Secret (a volume populated by a Secret)SecretName:  default-token-dhr4bOptional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300snode.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:          <none>
复制代码
  • 将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        <none>        443/TCP        5h16m
kubernetes-nginx   NodePort    10.105.177.114   <none>        80:31891/TCP   5s
  • 查看Service的详情,通过NodePort属性可以得到暴露到外部的端口;
kubectl describe services/kubernetes-nginx
Name:                     kubernetes-nginx
Namespace:                default
Labels:                   app=kubernetes-nginx
Annotations:              <none>
Selector:                 app=kubernetes-nginx
Type:                     NodePort
IP Families:              <none>
IP:                       10.106.227.54
IPs:                      10.106.227.54
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  30158/TCP
Endpoints:                172.17.0.7:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>
  • 通过CURL命令通过Minikube IP:NodePort IP可以访问Nginx服务,此时将打印Nginx主页信息;
curl $(minikube ip):30158
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>

标签的使用

通过给资源添加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   <none>        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-nginxpod-template-hash=78bcc44665version=v1
  • 通过Label查询Pod:

最后

提供一下免费的Java架构学习资料给大家,学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。

需要的朋友可以戳这里免费领取

还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
-nginx
pod-template-hash=78bcc44665
version=v1


*   通过Label查询Pod:### 最后提供一下免费的Java架构学习资料给大家,学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。**[需要的朋友可以戳这里免费领取](https://gitee.com/vip204888/java-p7)**还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/8d024dc392da50ff1307e6ef5633b183.png)

图文详解:K8S太火了!花10分钟玩转它不香么相关推荐

  1. K8S太火了!花10分钟玩转它不香么?

    我的Mall电商实战项目一直使用的是Docker容器化部署,有很多朋友建议搞个Kubernetes部署.最近正好在学习Kubernetes,准备更新一波!今天我们先来学习下Kubernetes的核心概 ...

  2. K8S太火了,花10分钟玩转它不香么?

    我的Mall电商实战项目一直使用的是Docker容器化部署,有很多朋友建议搞个Kubernetes部署.最近正好在学习Kubernetes,准备更新一波!今天我们先来学习下Kubernetes的核心概 ...

  3. K8S太火了!花10分钟玩转它不香么,面试必备知识点

    kubectl create deployment kubernetes-nginx --image=nginx:1.10 * 创建一个Deployment时K8S会产生如下操作:* 选择一个合适的N ...

  4. 字节Java高级岗:K8S太火了!花10分钟玩转它不香么

    To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/re ...

  5. mysql数据库主主_MySQL主主复制(图文详解)

    MySQL主主复制(图文详解) 发布时间:2020-07-12 23:10:25 来源:51CTO 阅读:218 作者:BonnieJason 一.实现原理 主主复制即在两台MySQL主机内都可以变更 ...

  6. 计算机刷新的作用,图文详解Win8重置和刷新功能:超强自我治愈

    直接自愈,Windows8出故障之后,伴随着重置和刷新两大新功能,世上无难事了啊.微软Windows8团队今日在官方博客详细向用户解释Win8的重置和刷新PC功能,将可一键复位系统到最佳状态.视频演示 ...

  7. SSL之CA证书颁发机构安装图文详解

    上一节我们说到,在验证公钥安全性时,是在CA机构颁发的包含用户的公钥及其身份信息的数字证书,数字证书由权威机构--CA签发.这个CA权威机构可以是自己的服务器也可以是国际公认的CA权威机构.下面我就来 ...

  8. Docker持续部署图文详解

    2019独角兽企业重金招聘Python工程师标准>>> Docker持续部署图文详解 博客分类: docker 架构 JAVA项目如何通过Docker实现持续部署(只需简单四步),即 ...

  9. php。defined,PHP defined()函数的使用图文详解

    PHP defined()函数的使用图文详解 PHP defined() 函数 例子 定义和用法 defined() 函数检查某常量是否存在. 若常量存在,则返回 true,否则返回 false. 语 ...

最新文章

  1. Opencv实战 | 用摄像头自动化跟踪特定颜色物体
  2. 如何选择合适的垃圾收集器
  3. nginx下使用asan和valgrind两个静态检查工具
  4. oracle 的wecate函数,1.Oracle中decode()函数用法
  5. python学习之老男孩python全栈第九期_day009之初始函数初窥
  6. 【★】电子产品降价的3大原因!
  7. 程序员面试金典——9.5字符串排列
  8. 事件分发机制 事件拦截 滑动冲突 MD
  9. 信息计算机课评课,关于信息技术的评课稿
  10. 如何将十进制转化为二进制和十六进制
  11. 小程序 获取小程序链接
  12. android flash插件安装失败,安卓手机怎么安装Adobe Flash Player插件
  13. spring事务传播级别
  14. java中reject方法作用_Promise.all中对于reject的处理方法
  15. c c 语言写的四六级词汇系统,2020年6月英语四级考试大纲词汇:C
  16. 手机python软件哪个好用_如何在手机上学习python编程?有哪些软件可以使用?
  17. nginx反向代理是什么?
  18. FineBI 中 逻辑函数if 嵌套 没有else
  19. 手机wps云文档无法连接服务器,手机wps云文档怎么用
  20. 登陆时做下双因子验证

热门文章

  1. 小实操(3): 利用键盘事件实现小人快跑
  2. 2017年小老虎软考辅导视频访问量备忘录
  3. Latex排版论文常见问题
  4. 2020年中国热成像品牌崛起,高德红外跃居全球第二
  5. 计算机二级c语言程序题怎么评分,计算机二级编程题怎么给分
  6. 阵列麦克风声音定位-代码python实现-二维与三维声音定位
  7. FS9017R.是一款单节4.2V锂电池充电管理IC
  8. qq文件怎么传到百度云_如何将手机百度网盘中的文件发送给微信或qq好友 看完就明白了...
  9. 加域“不能访问网络位置”处理
  10. CSS的两种盒子模型