上一篇中,我们学习了使用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的信息

官方教程:Viewing Pods and Nodes

Pod代表了一组(单个或多个)容器和它们共享的资源,这些资源包括:
  • 共享的存储, 例如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上部署应用的更多相关文章

  1. 在k8s上部署日志系统elfk

    日志系统elfk 前言 经过上周的技术预研,在本周一通过开会研究,根据公司的现有业务流量和技术栈,决定选择的日志系统方案为:elasticsearch(es)+logstash(lo)+filebea ...

  2. 优化:在k8s上部署的gitlab

    gitlab组件图 gitlab在k8s上占用资源 # kubectl top pods -n default | grep git* gitlab-gitaly-0 9m 444Mi gitlab- ...

  3. 使用Rancher在K8S上部署高性能PHP应用程序

    介 绍 PHP是网络上最流行的编程语言之一,许多被广泛使用的内容管理系统都使用它开发,如WordPress和Drupal,并为现代服务器端框架(如Laravel和Symfony)提供核心代码. 尽管P ...

  4. 容器化 | 在 K8s 上部署 RadonDB MySQL Operator 和集群

    作者:程润科 数据库研发工程师 编辑:张莉梅 高级文档工程师 视频:钱芬 高级测试工程师 本文将演示在 Kubernetes 上部署 RadonDB MySQL Kubernetes 2.X(Oper ...

  5. kubernetes实战(十四):k8s持久化部署gitlab集成openLDAP登录

    1.基本概念 使用k8s安装gitlab-ce,采用GlusterFS实现持久化(注意PG使用的是NFS存储,使用动态存储重启postgresql的pod后无法成功启动pg,待解决),并集成了open ...

  6. k8s 上部署 Redis 三主三从 集群

    目录 介绍 为什么要使用Redis? 什么是Redis群集? 在Kubernetes中部署Redis集群 从 GitHub 上下载: 创建pv 创建statefulset 创建service 初始化 ...

  7. K8S 上部署 Redis-cluster 三主三从 集群

    介绍 Redis代表REmote DIctionary Server是一种开源的内存中数据存储,通常用作数据库,缓存或消息代理.它可以存储和操作高级数据类型,例如列表,地图,集合和排序集合. 由于Re ...

  8. kubernetes实战(二十):k8s一键部署高可用Prometheus并实现邮件告警

    1.基本概念 本次部署使用的是CoreOS的prometheus-operator. 本次部署包含监控etcd集群. 本次部署适用于二进制和kubeadm安装方式. 本次部署适用于k8s v1.10版 ...

  9. 在k8s上部署第一个php应用

    一.搭建nginx+php 1.站点配置文件 1.1创建nginx-configmap.yaml [root@master k8s]# cat nginx-configmap.yaml apiVers ...

随机推荐

  1. LeetCode_509.斐波那契数

    LeetCode-cn_509 509.斐波那契数 斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列.该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.也就是: F(0) ...

  2. net.sf.json和com.alibaba.fastjson两种json加工类的相关使用方法

    com.alibaba.fastjson Fastjson是一个Java语言编写的高性能功能完善的JSON库.它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Jav ...

  3. $.ajax函数调接口,报异常No converter found for return value of type: class java.util.ArrayList

    接口正常执行,返回给前端后报服务器500异常,异常详情: org.springframework.http.converter.HttpMessageNotWritableException: No ...

  4. OpenStack Nova 高性能虚拟机之 NUMA 架构亲和

    目录 文章目录 目录 写在前面 计算平台体系结构 SMP 对称多处理结构 NUMA 非统一内存访问结构 MPP 大规模并行处理结构 Linux 上的 NUMA 基本对象概念 NUMA 调度策略 获取宿 ...

  5. python学习笔记:(七)dict(字典)常用的方法

    字典是通过名称来引用值的数据结构,这种类型的数据结构称为:映射. 字典是python中唯一的内建映射类型. 注意: 1.字典中键必须是唯一的,如果同一个键被赋值两次,会使用后一个值: 2.键必须不可变 ...

  6. java 上传文件到FTP(centos中的ftp服务)

    ftp服务器系统:centos7 提供ftp的服务:vsftpd pom.xml 依赖 <dependency> <groupId>commons-net</groupI ...

  7. 学习 Node.js 的 6 个步骤

    第一步 对于刚接触Node.js的新手来说,第一步无非是打好基础,你需要弄明白以下事情: JavaScript 的特性和语法.假如你对 JavaScript 还不熟悉的话,推荐书籍及链接: JavaS ...

  8. CSS3 基础

    style 标签 <style type="text/css"> h1 { font-size:12px; color:#F00; } </style> 行 ...

  9. JAVA基础面向对象分析

    面向对象内存的分析: 一:内存的分类 1:栈(tack) 2:堆(heop) 3: 静态区 4:代码区 二:引用数据类型内存特点 三:引用数据类型传值的特点 四:引用数据类型在作为参数时的特点 面向对 ...

  10. 数据库 三范式 BCFN

    # 三范式 范式  设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小.  目前关系数据库有六种范式:第一 ...