k8s应用配置详解

1. 概述

k8s主要通过Object定义各种部署任务(例如:部署应用、部署Ingress路由规则、部署service等等),通过kubectl命令远程操作k8s集群。

Object的定义通常以Yaml格式进行描述。

Yaml是一种直观的数据序列化格式,主要通过缩进的方式组织数据。

Yaml例子:

#  注释
house:
  family:
    name: Doe
    parents: # - 开始,表示数组元素
      - John
      - Jane
    children:
      - Paul
      - Mark
      - Simone
  address:
    number: 34
    street: Main Street
    city: Nowheretown
    zipcode: 12345

定义好object文件后就可以通过kubectl命令将object发送给k8s服务器执行。

Object格式:

apiVersion: apps/v1 # k8s api版本
kind: Deployment  # Object类型
metadata:	# Object元数据定义,例如定义名字
  name: nginx-deployment
spec:  # Object 内容定义
  .....
status: # Object 运行状态, 通常不需要我们定义,k8s负责更新
  ....

2.  kubectl 命令详解

2.1. kubectl安装&配置

安装kubectl命令

#LINUX
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl
chmod +x ./kubectl
mv ./kubectl /usr/bin/kubectl

#Windows, 下载kubectl命令,然后配置下环境变量PATH,将kubectl的路径加入到PATH
https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/windows/amd64/kubectl.exe

配置k8s集群连接凭证

kubectl命令连接远程服务器的配置默认存放在$HOME/.kube/config文件中,也可以通过指定--kubeconfig参数执行配置文件,例子:kubectl --kubeconfig ./k8s.conf  get pods

k8s集群的凭证,以阿里云为例展示如何获取:

复制下图中的凭证保存到指定的位置即可

2.2. kubectl命令常用操作

#应用一个object配置, 至于部署什么,就看yaml配置文件定义了什么, 这里部署一个pod
kubectl apply -f ./pod.yaml

#kubectl get子命令用户展示k8s资源,k8s资源就是我们通过object部署的东西。
#展示所有pod
kubectl get pods

#展示kube-system名字空间下的所有pod, 默认kubectl命令只是操作default默认名字空间,可以通过-n参数指定名字空间
kubectl get pods -n kube-system

#展示所有deployment
kubectl get deploy

#展示所有service(服务)
kubectl get svc

#展示所有ingress
kubectl get ingress

#以yaml格式,展示具体的ingress资源的配置, 展示任意资源具体的yaml配置命令格式:kubectl get 资源类型 资源名字 -o yaml
kubectl get ingress 资源名字 -o yaml

#删除指定的资源,具体删除内容由配置文件object定义
kubectl delete -f ./pod.yaml

#在容器中执行命令格式
kubectl exec 容器id  命令

#在admin-app-5f84f57f7-vthlf容器中,执行ls /alidata/www 命令
kubectl exec admin-app-5f84f57f7-vthlf ls /alidata/www

#在admin-app-5f84f57f7-vthlf容器中,打开shell交互窗口, 需要加上-it参数
kubectl exec -it admin-app-5f84f57f7-vthlf bash

3. k8s常用对象(Object)类型

3.1. deployment

主要用于部署pod,支持滚动升级。

apiVersion: apps/v1
#对象类型
kind: Deployment
metadata:
  name: nginx-deployment  #deployment名字
  labels:
    app: nginx   #deployment标签,可以自由定义
spec:
  replicas: 3	#pod 副本数量
  selector:	    #pod选择器定义,主要用于定义根据什么标签搜索需要管理的pod
    matchLabels:
      app: nginx  #pod标签
  template:  #pod模版定义
    metadata:
      labels:	#pod 标签定义
        app: nginx
    spec:
      containers: #容器数组定义
      - name: nginx	 #容器名
        image: nginx:1.7.9	#镜像地址
		command: #容器启动命令,【可选】
            - /alidata/www/scripts/startWebServer.sh
        ports:	#定义容器需要暴露的端口
        	- containerPort: 80
		env: #环境变量定义【可选】
			- name: ZHIPUZI_CONSOLE_URL #变量名
			  value: https://cy.zhipuzi.com #变量值	

3.2. service

服务定义,主要用于暴露pods容器中的服务。

apiVersion: v1
#对象类型
kind: Service
metadata:
  name: my-service #服务名
spec:
  selector: #pod选择器定义,由这里决定请求转发给那些pod处理
    app: nginx #pod 标签
  ports: #服务端口定义
  - protocol: TCP  #协议类型,主要就是TCP和UDP
    port: 80 # 服务端口
    targetPort: 80 #pod 容器暴露的端口

3.3. ingress

http路由规则定义,主要用于将service暴露到外网中

apiVersion: extensions/v1beta1
#对象类型
kind: Ingress
metadata:
  name: my-ingress #ingress应用名
spec:
  rules: #路由规则
    - host: cy.zhipuzi.com  #域名
      http:
        paths:  #访问路径定义
          - path: /   #代表所有请求路径
            backend:  #将请求转发至什么服务,什么端口
              serviceName: my-service #服务名
              servicePort: 80 #服务端口

3.4. ConfigMap

主要用于容器配置管理。

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config #配置项名字
data:
	key1: value1
	key2: value2

定义完配置后,可以通过以下方式在容器中应用配置:

#通过环境变量注入配置
apiVersion: v1
kind: Pod
metadata:
   name: config-pod-1
spec:
   containers:
     - name: test-container
       image: busybox
       command: [ "/bin/sh", "-c", "env" ]
       env:
         - name: SPECIAL_LEVEL_KEY				  ## 环境变量
           valueFrom:                             ##使用valueFrom来指定env引用配置项的value值
             configMapKeyRef:
               name: my-config           ##引用的配置文件名称
               key: key1                 ##引用的配置项key
   restartPolicy: Never
#通过数据卷注入配置
apiVersion: v1
kind: Pod
metadata:
   name: config-pod-4
spec:
   containers:
     - name: test-container
       image: busybox
       command: [ "/bin/sh", "-c", "ls /etc/config/" ]   ##列出该目录下的文件名
       volumeMounts:
       - name: config-volume	#配置项名字
         mountPath: /etc/config	#容器中的挂载目录
   volumes:			#数据卷定义
     - name: config-volume	#数据卷名
       configMap:			#数据卷类型
         name: my-config	#配置项名字
   restartPolicy: Never

原文地址:https://www.cnblogs.com/gramblog/p/11503605.html

时间: 2024-10-02 05:10:41

k8s应用配置详解的相关文章

使用LVS实现负载均衡原理及安装配置详解

转:http://www.cnblogs.com/liwei0526vip/p/6370103.html 使用LVS实现负载均衡原理及安装配置详解 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备F5.Netscale.这里主要是学习 LVS 并对其进行了详细的总结记录. 一.负载均衡LVS基本介绍 LB集群的架构和原理很简单,就是当用户的请求过来时,会直接分发到Director

LVS配置详解

一.LVS系统组成 前端:负载均衡层 –      由一台或多台负载调度器构成 中间:服务器群组层 –      由一组实际运行应用服务的服务器组成 底端:数据共享存储层 –      提供共享存储空间的存储区域 二.LVS术语 Director Server:调度服务器,将负载分发到RealServer的服务器 Real Server:真实服务器,真正提供应用服务的服务器 VIP:虚拟IP地址,公布给用户访问的IP地址 RIP:真实IP地址,集群节点上使用的IP地址 DIP:Director连

logback logback.xml 常用配置详解

一:根节点 包含的属性: scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true. scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒.当scan为true时,此属性生效.默认的时间间隔为1分钟. debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态.默认值为false. 例如: <configuration scan="true" scan

php-fpm的配置详解

php5.3自带php-fpm /usr/local/php/etc/php-fpm.confpid = run/php-fpm.pidpid设置,默认在安装目录中的/var/run/php-fpm.pid,建议开启 error_log = log/php-fpm.log错误日志,默认在安装目录中的/var/log/php-fpm.log log_level = notice错误级别. 可用级别为: alert(必须立即处理), error(错误情况), warning(警告情况), notic

varnish安装及配置详解

varnish系统架构: varnish主要运行两个进程:Management进程和Child进程(也叫Cache进程). Management进程主要实现应用新的配置.编译VCL.监控varnish.初始化varnish以及提供一个命令行接口等.Management进程会每隔几秒钟探测一下Child进程以判断其是否正常运行,如果在指定的时长内未得到Child进程的回应,Management将会重启此Child进程. Child进程包含多种类型的线程,常见的如:Acceptor线程:接收新的连接

Windows下Nginx Virtual Host多站点配置详解

Windows下Nginx Virtual Host多站点配置详解 此教程适用于Windows系统已经配置好Nginx+Php+Mysql环境的同学. 如果您还未搭建WNMP环境,请查看 windows7配置Nginx+php+mysql教程. 先说明一下配置多站点的目的:在生产环境中,如果将系统所有代码文件都放在公开目录中,则很容易被查看到系统源码,这样是很不安全的,所以需要只公开index.php的入口文件目录.而同一个服务器中,可能运行多个系统,这样就必须公开多个入口文件目录,以便用不同的

linux FTP配置详解

一.vsftpd说明: LINUX下实现FTP服务的软件很多,最常见的有vsftpd,Wu-ftpd和Proftp等.Red Hat Enterprise Linux中默认安装的是vsftpd. 访问FTP服务器时需要经过验证,只有经过了FTP服务器的相关验证,用户才能访问和传输文件.vsftpd提供了3种ftp登录形式:  (1)anonymous(匿名帐号) 使用anonymous是应用广泛的一种FTP服务器.如果用户在FTP服务器上没有帐号,那么用户可以以anonymous为用户名,以自己

Log4J日志配置详解

一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使用这三个组件可以轻松地记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置. 1.Loggers Loggers组件在此系统中被分为五个级别:DEBUG.INFO.WARN.ERROR和FATAL.这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR <

keepalived的配置详解(非常详细)

keepalived的配置详解(非常详细) 2017-01-22 15:24 2997人阅读 评论(0) 收藏 举报  分类: 运维学习(25)  转载自:http://blog.csdn.net/u010391029/article/details/48311699 1. 前言 VRRP(Virtual Router Redundancy Protocol)协议是用于实现路由器冗余的协议,最新协议在RFC3768中定义,原来的定义RFC2338被废除,新协议相对还简化了一些功能. 2. 协议说