上一篇中,我们学习了使用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. 使用discriminator实现鉴别器

    1在人员接口实现方法 public Employee getEmpByIdStep(Integer id); 2在映射文件进行配置 <!-- public Employee getEmpById ...

  2. webpack4常用片段

    webpack 4常用 初始化 npm init // Webpack 4.0以后需要单独安装 npm install webpack webpack-cli --save-dev 基础的config ...

  3. STL标准库-容器-set与map

    STL标准库-容器-set与multiset C++的set https://www.cnblogs.com/LearningTheLoad/p/7456024.html STL标准库-容器-map和 ...

  4. Eclipse高版本无法兼容FatJar的问题解决

    发现eclipse打包jar无法连带打包第三方lib,于是选择安装插件fatjar,现在说明fatjar安装过程: 1.安装方法:   1)下载安装:   https://sourceforge.ne ...

  5. redis--迁库操作

    如果碰到redis库要迁移(之前的redis用作他用)或者备份用,就需要操作redis迁移 import redis def qianyi(k=None,v=None,name=None): r1 = ...

  6. Ajax请求Json数据,报500错误,后台没有错误日志。

    post请求:http://localhost:9080/DataDiscoveryWeb/issueformcount/queryIssueTendencyDetail.xhtml?jobId=86 ...

  7. application.events 识别组合键 参考。

    https://blog.csdn.net/chinayu2007/article/details/43761277 在窗体上放上ApplicationEvents控件,在OnMessage消息中加入 ...

  8. 【ABAP系列】SAP ABAP DOI展示EXCEL或WORD

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP DOI展示EX ...

  9. big data env setup

    install Spark on CentOS: https://aodba.com/how-to-install-apache-spark-in-centos-standalone/ https:/ ...

  10. 【linux开发】apt源设置

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