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 ...
随机推荐
- webpack插件之webpack-dev-server
webpack插件之webpack-dev-server webpack插件 自动化 webpack-dev-server 现在只需要使用 npm run build指令就可以自动打包,并自动处理好 ...
- awk命令1
[root@a ~]# awk 'END{print NR}' c.txt #没错,这就是文件的行数,当然,这种统计方法不是linux下最快的,但也是一种思路3[root@a ~]# wc ...
- 【flask_sqlalchemy】模糊查询
flask_sqlalchemy的查询方法有filter()和filter_() 这2个方法的主要区别如下: 模块 语法 ><(大于和小于)查询 and_和or_查询 filter_by( ...
- 《Using Python to Access Web Data》 Week5 Web Services and XML 课堂笔记
Coursera课程<Using Python to Access Web Data> 密歇根大学 Week5 Web Services and XML 13.1 Data on the ...
- Application.CreateForm()和TForm.Create()创建的窗体有什么区别么?二者在使用上各有什么技巧?(50分)
https://wedelphi.com/t/135849/ 请详细些,并给出例子.谢谢. Application.CreateForm()创建的第一个可显示的窗体是自动成为主窗体,并且自动显示,并且 ...
- 合理设置redis主从buffer 不错
背景 某次抢购时,一个redis集群的某个分片,从实例响应时间陡增到几十秒,报警后运维将其中一个本应该下线的slave下掉,问题减轻但没有解决,又把另一个正常的slave下线掉,问题消失. maste ...
- MySQL学习-数据库设计以及sql的进阶语句
1.数据库设计 关系型数据库建议在E-R模型的基础上,我们需要根据产品经理的设计策划,抽取出来模型与关系,制定出表结构,这是项目开始的第一步 在开发中有很多设计数据库的软件,常用的如power des ...
- 【Qt开发】Qt测试计算时间
方法1 利用QTime,其精度为ms级 </pre><pre code_snippet_id="1852215" snippet_file_name=" ...
- docker--docker 的web可视化管理工具
12 docker 的web可视化管理工具 12.1 常用工具介绍 当 Docker 部署规模逐步变大后,可视化监控容器环境的性能和健康状态将会变得越来越 重要. Docker的图形化管理工具,提供状 ...
- argparse命令行传参
import argparse parser = argparse.ArgumentParser(description='manual to this script') # 创建解析器,及其描述 p ...