kubernetes之三 使用kubectl在k8s上部署应用
在上一篇中,我们学习了使用minikube来搭建k8s集群。k8s集群启动后,就可以在上面部署应用了。本篇,我们就来学习如何使用kubectl在k8s上部署应用。学习之前,可以先从下面这篇博客上了解到部署方式有多种:
关于kubernetes的部署方式:Kubernetes的几种主流部署方式01-minikube部署
关于minikube和kubeadm部署方式的区别可以参考:Kubernetes的几种主流部署方式02-kubeadm部署高可用集群
官方文档:Using kubectl to Create a Deployment (Hello Minikube)
一、创建deployment
1.使用kubectl create命令创建一次部署,该部署用于管理Pod
kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-node
2.查看部署
kubectl get deployments
3.查看pod
kubectl get pods
4.查看集群事件
kubectl get events
5.查看kubectl配置
kubectl config view
二、对外暴露服务
默认情况,pod仅能在集群内网中通过内网ip访问。如果要通过外网访问,需要将pod暴露成kubernetes服务。
暴露服务
1.使用kubectl expose命令将pod暴露到公网
kubectl expose deployment hello-node --type=LoadBalancer --port=
The --type=LoadBalancer
flag indicates that you want to expose your Service outside of the cluster.
2.查看服务
[peng@cent99 ~]$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-node LoadBalancer 10.101.254.43 <pending> :/TCP 3d19h
kubernetes ClusterIP 10.96.0.1 <none> /TCP 5d17h
3.查看下对外暴露的端口(NodePort选项)
[peng@cent99 ~]$ kubectl describe services/hello-node
Name: hello-node
Namespace: default
Labels: app=hello-node
Annotations: <none>
Selector: app=hello-node
Type: LoadBalancer
IP: 10.101.254.43
Port: <unset> /TCP
TargetPort: /TCP
NodePort: <unset> /TCP
Endpoints:
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
4.
minikube service hello-node
??这个我没有成功,弹出浏览器后无法访问??
使用标签
部署会自动为pod创建一个标签,使用describe deploymen命令可以查看标签的名称
我们用这个标签来查询pod列表
[peng@cent99 ~]$ kubectl get pods -l app=hello-node
NAME READY STATUS RESTARTS AGE
hello-node-55b49fb9f8-s2x8f / ImagePullBackOff 3d19h
同样,我们可以使用这个标签来查询service列表
[peng@cent99 ~]$ kubectl get services -l app=hello-node
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-node LoadBalancer 10.101.254.43 <pending> :/TCP 3d19h
使用kubectl label命令创建新标签
[peng@cent99 ~]$ export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
[peng@cent99 ~]$ echo Name of the Pod: $POD_NAME
Name of the Pod: hello-node-55b49fb9f8-s2x8f [peng@cent99 ~]$ kubectl label pod $POD_NAME run=v1
pod/hello-node-55b49fb9f8-s2x8f labeled
使用新创建的标签来查询
[peng@cent99 ~]$ kubectl get pods -l run=v1
NAME READY STATUS RESTARTS AGE
hello-node-55b49fb9f8-s2x8f / ImagePullBackOff 3d20h
三、查看Pod和Node的信息
- 共享的存储, 例如Volumes
- 网络, 例如唯一的集群ip地址
- 每个容器如何运行相关的一些信息,例如容器镜像的版本或者使用的唯一端口
Pod总是运行在Node中,Node可以是一台物理机,也可以是虚拟机。每个Pod都由Master管理,一个Node可以操纵多个Pod。Master会自动调度集群中跨节点的Pod,Master的自动调度会考虑每个节点上的可用资源。
每个节点都至少会运行Kubelet和容器运行时。
- Kubelet, a process responsible for communication between the Kubernetes Master and the Node; it manages the Pods and the containers running on a machine.
- A container runtime (like Docker, rkt) responsible for pulling the container image from a registry, unpacking the container, and running the application.
下面的kubectl命令可以完成大多数常用的操作:
- kubectl get - 列出资源
- kubectl describe - 显示资源详情
- kubectl logs - 打印pod中的容器的日志
- kubectl exec - 向pod中的容器执行命令
通过这些命令,我们可以查看应用何时部署,当前运行状态,运行位置,和相关的配置信息
查看资源对象
kubectl get
#查看所有pod列表
kubectl get pods
#查看rc列表
kubectl get rc
#查看service列表
kubectl get service
描述资源对象详细信息
kubectl describe
#显示node的详细信息
kubectl describe nodes [node名]
#显示pod的详细信息
kubectl describe pods/[pod名]
#显示由RC管理的pod的信息
kubectl describe pods [rc名]
执行容器的命令
kubectl exec
#执行pod的date命令,默认使用pod中的第1个容器执行
kubectl exec <pod名> date
#指定pod中某个容器执行date命令
kubectl exec <pod名> -c <容器名> date
#登录容器执行命令
kubectl exec -it <pod名> -c <容器名> /bin/bash
查看容器的日志
kubectl logs
#查看容器输出到stdout的日志
kubectl logs <pod名>
#跟踪查看容器的日志,相当于tail -f命令的结果
kubectl logs -f <pod名> -c <容器名>
kubernetes之三 使用kubectl在k8s上部署应用的更多相关文章
- 在k8s上部署日志系统elfk
日志系统elfk 前言 经过上周的技术预研,在本周一通过开会研究,根据公司的现有业务流量和技术栈,决定选择的日志系统方案为:elasticsearch(es)+logstash(lo)+filebea ...
- 优化:在k8s上部署的gitlab
gitlab组件图 gitlab在k8s上占用资源 # kubectl top pods -n default | grep git* gitlab-gitaly-0 9m 444Mi gitlab- ...
- 使用Rancher在K8S上部署高性能PHP应用程序
介 绍 PHP是网络上最流行的编程语言之一,许多被广泛使用的内容管理系统都使用它开发,如WordPress和Drupal,并为现代服务器端框架(如Laravel和Symfony)提供核心代码. 尽管P ...
- 容器化 | 在 K8s 上部署 RadonDB MySQL Operator 和集群
作者:程润科 数据库研发工程师 编辑:张莉梅 高级文档工程师 视频:钱芬 高级测试工程师 本文将演示在 Kubernetes 上部署 RadonDB MySQL Kubernetes 2.X(Oper ...
- kubernetes实战(十四):k8s持久化部署gitlab集成openLDAP登录
1.基本概念 使用k8s安装gitlab-ce,采用GlusterFS实现持久化(注意PG使用的是NFS存储,使用动态存储重启postgresql的pod后无法成功启动pg,待解决),并集成了open ...
- k8s 上部署 Redis 三主三从 集群
目录 介绍 为什么要使用Redis? 什么是Redis群集? 在Kubernetes中部署Redis集群 从 GitHub 上下载: 创建pv 创建statefulset 创建service 初始化 ...
- K8S 上部署 Redis-cluster 三主三从 集群
介绍 Redis代表REmote DIctionary Server是一种开源的内存中数据存储,通常用作数据库,缓存或消息代理.它可以存储和操作高级数据类型,例如列表,地图,集合和排序集合. 由于Re ...
- kubernetes实战(二十):k8s一键部署高可用Prometheus并实现邮件告警
1.基本概念 本次部署使用的是CoreOS的prometheus-operator. 本次部署包含监控etcd集群. 本次部署适用于二进制和kubeadm安装方式. 本次部署适用于k8s v1.10版 ...
- 在k8s上部署第一个php应用
一.搭建nginx+php 1.站点配置文件 1.1创建nginx-configmap.yaml [root@master k8s]# cat nginx-configmap.yaml apiVers ...
随机推荐
- js实现两个从input获取到的数字相加引发的问题
从input中获取到的数据是文本类型的,如果不转化类型直接相加会变成字符串的相加. 使用Number()函数可以解决这个问题,如下 var c = Number(a) + Number(b)
- 什么是webpack以及为什么使用它
什么是webpack以及为什么使用它 新建 模板 小书匠 在ES6之前,我们要想进行模块化开发,就必须借助于其他的工具.因为开发时用的是高级语法开发,效率非常高,但很可惜的是,浏览器未必会支持或认识 ...
- drop() delete() remove()函数
drop()函数 1 删除前务必指定columns或index,避免出错. import pandas as pd df = pd.DataFrame({'a':[1,2,3], 'b':[3,4,5 ...
- Jmeter之检查点
检查点 Jmeter中检查点也叫断言,Jmeter中有很多类型的断言,但是最常用的是响应断言,即根据服务器返回的结果来判断测试是否通过. 响应断言 添加断言结果用于运行完毕后查看结果 测试通过 测试不 ...
- Linux安装MySql5.7及配置(yum安装)
Linux安装MySql5.7及配置(yum安装) [root@xld ~]# rpm -q centos-release centos-release-7-7.1908.0.el7.centos.x ...
- SPA(single page application)
一.SPA的概述 SPA(single page application)单页面应用程序,在一个完成的应用或者站点中,只有一个完整的html页面,这个页面有一个容器,可以把需要加载的代码片段插入到该容 ...
- Django 优秀资源大全
版权: https://github.com/haiiiiiyun/awesome-django-cn 转自:https://www.jianshu.com/p/38c4dd6d8e28 Awesom ...
- AutoML文献阅读
逐步会更新阅读过的AutoML文献(其实是NAS),以及自己的一些思考 Progressive Neural Architecture Search,2018ECCV的文章: 目的是:Speed up ...
- 手工设计神经MNIST使分类精度达到98%以上
设计了两个隐藏层,激活函数是tanh,使用Adam优化算法,学习率随着epoch的增大而调低 import tensorflow as tf from tensorflow.examples.tuto ...
- Linux-定时任务-打包与压缩
figure:first-child { margin-top: -20px; } #write ol, #write ul { position: relative; } img { max-wid ...