在上一篇中,我们学习了使用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. debian配置国内软件源

    本例在debian:buster-slim docker镜像中实验通过 1.启动docker实例 docker run -it --name debian debian:buster-slim bas ...

  2. sklearn—无监督最近邻

    无监督最近邻 NearestNeighbors (最近邻)实现了 unsupervised nearest neighbors learning(无监督的最近邻学习). 它为三种不同的最近邻算法提供统 ...

  3. 数据结构和算法(Java版)快速学习(数组Array)

    Java数组 在Java中,数组是用来存放同一种数据类型的集合,注意只能存放同一种数据类型. 用类封装数组实现数据结构 数据结构必须具有以下基本功能: ①.如何插入一条新的数据项 ②.如何寻找某一特定 ...

  4. DAY 1模拟赛

    DAY1 杨溢鑫小姐姐出题 好毒瘤啊 T1 低仿机器人 (robo,1s,64M) 题目描述 自从 Dji 推出 robomaster S1 机器人过后,小文就一直缠着爸爸想要一个机器人.没想到爸爸最 ...

  5. 1、Shiro简介以及整体架构

    1.Shiro概念和作用: 利用shiro可以快速完成权限管理模块的开发 Spring的官网也是用Shiro做安全管理的... Shiro整体架构: 可能你感觉上面的图片很乱,但是你一定要先大体有个印 ...

  6. windows,oracle,dg报错:ORA-12528,ORA-12154,ORA-10456 ,PING[ARC1]: Heartbeat failed to connect to standby 'orclbk'. Error is 12154

    windows,oracle,dg报错:ORA-12528,ORA-12154,ORA-10456 最近有需求在windows的2台oracle服务器上搭建dg,在过程中遇到了一些错误,跟在linux ...

  7. windows下简单安装postgres

    目前版本是PostgreSQL 9.6,它经过以下平台认证: 32位Windows Windows 7,8和10 Windows 2008 Server 64位Windows Windows 7,8和 ...

  8. 如何保存不连着电脑跑monkey?如何跑多个APK的monkey?

    哈喽,大家有没有遇到用真机跑monkey的时候,跑到一半结果小手一抖不小心把线碰掉了,结果报告就没获取到啦~ 今天就来解决这个问题 1.如何保存不连着电脑跑monkey? 1).输入命令进入shell ...

  9. 【Linux开发】Linux动态链接库搜索路径问题

    说明:下列内容是从网上获取的,未经验证,仅作参考之用 动态库的搜索路径搜索的先后顺序是: (1).编译目标代码时指定的动态库搜索路径:(2).环境变量LD_LIBRARY_PATH指定的动态库搜索路径 ...

  10. 【linux开发】apt源设置

    不同的网络状况连接以下源的速度不同, 建议在添加前手动验证以下源的连接速度(ping下就行),选择最快的源可以节省大批下载时间. 首先备份源列表: sudo cp /etc/apt/sources.l ...