在k8s中的基本概念

一.Pod
1. pod
k8s下最重要也最基本的概念,由一个根容器Pause和许多用户业务容器组成,是容器的载体.

2. pod的yaml定义格式及字段

apiVersion: v1            //版本
kind: pod //类型,pod
metadata: //元数据
name: String //元数据,pod的名字
namespace: String //元数据,pod的命名空间
labels: //元数据,标签列表
- name: String //元数据,标签的名字
annotations: //元数据,自定义注解列表
- name: String //元数据,自定义注解名字
spec: //pod中容器的详细定义
containers: //pod中的容器列表,可以有多个容器
- name: String
image: String //容器中的镜像
imagesPullPolicy: [Always|Never|IfNotPresent]//获取镜像的策略
command: [String] //容器的启动命令列表(不配置的话使用镜像内部的命令)
args: [String] //启动参数列表
workingDir: String //容器的工作目录
volumeMounts: //挂载到到容器内部的存储卷设置
- name: String
mountPath: String
readOnly: boolean
ports: //容器需要暴露的端口号列表
- name: String
containerPort: int //容器要暴露的端口
hostPort: int //容器所在主机监听的端口(容器暴露端口映射到宿主机的端口)
protocol: String
env: //容器运行前要设置的环境列表
- name: String
value: String
resources: //资源限制
limits:
cpu: Srting
memory: String
requeste:
cpu: String
memory: String
livenessProbe: //pod内容器健康检查的设置
exec:
command: [String]
httpGet: //通过httpget检查健康
path: String
port: number
host: String
scheme: Srtring
httpHeaders:
- name: Stirng
value: String
tcpSocket: //通过tcpSocket检查健康
port: number
initialDelaySeconds: 0//首次检查时间
timeoutSeconds: 0 //检查超时时间
periodSeconds: 0 //检查间隔时间
successThreshold: 0
failureThreshold: 0
securityContext: //安全配置
privileged: falae
restartPolicy: [Always|Never|OnFailure]//重启策略
nodeSelector: object //节点选择
imagePullSecrets:
- name: String
hostNetwork: false //是否使用主机网络模式,默认否
volumes: //在该pod上定义共享存储卷
- name: String
meptyDir: {}
hostPath:
path: string
secret: //类型为secret的存储卷
secretName: String
item:
- key: String
path: String
configMap: //类型为configMap的存储卷
name: String
items:
- key: String
path: String

  

3. label 和 label selector
label是k8s中的核心概念,label由key和value组成,用户自定义,用以区分和筛选pod.
如:Service和ReplicationController中筛选component为redis的pod
selector:
component: redis

二.ReplicationController
1.ReplicationController(简称Rc)
Rc控制了按期望的数量来运行pod.Rc定义包括了以下部分:
a.期待的pod副本数
b.筛选目标pod的label selector
c.但pod小于指定副本数的时候,用于创建pod的模板(template).

2.定义示例:

apiVersion: v1
kind: ReplicationController
metadata:
name: nginx
spec:
replicas: 3
selector:
app: nginx
template:
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80

  

3.删除Rc并不会删除rc创建的pod.为了删除所有pod,可以将replicas设置为0.
如:
kubectl scale rc php-rc --replicas 0

4.扩容
kubectl scale rc php-rc --replicas 2

5.自动控制pod副本数量最小1,最大4:
kubectl autoscale rc php-rc --min=1 --max=4

三.Deployment
在内部使用了Replica Set(可以看做是Rc的升级版本,90%与Rc相似).

三.Service
1.概念及作用:
定义了一个服务访问的入口地址,因为pod副本会有多个,同样的地址也就有多个,如果没有service,将需要考虑pod的负载均衡问题.换句话说service将一组pod组成一个集合来提供给其他资源,用户无需关注各个pod副本.
Service与前后端的Pod集群通过label selector来实现对接,rc保证了service(实际上是pod的数量)服务质量

2.IP种类
Node IP: 节点IP(物理网卡)
Pod IP: pod上的IP(Docker Engine分配)
Cluster IP: service上的IP(K8s分配,无法被ping)

3.ports属性:
nodePort: 外部访问service,通过nodeIP:nodePort方式提供给外部访问k8s中的服务(需要配置对应service的type为NodePort,同时在节点服务器上设置转发iptables -P FORWARD ACCEPT,默认为30000-32767)
port: k8s内部访问service的端口
targetPort: 容器的端口,是pod上的端口(如无指定,默认和port相同)
流量进入路径为:nodePort -> port -> targetPort

4.服务发现:
环境变量(可进入具体的pod中查看每个service对应的环境变量)和kube-dns

5.Service的type类型:
ClusterIP: 仅仅使用一个集群内部的IP地址 - 这是默认值。选择这个值意味着你只想这个服务在集群内部才可以被访问到
请注意,这个内部访问指的是在集群内部的pod上可以访问service,
并不是集群内部节点上直接访问;在service所在pod的节点主机上是可以直接以ClusterIP:端口的形式访问到;如果pod不在该节点上,节点主机要访问该service,需要做IP转发:

ip route add 10.254.0.0/16 dev docker0

10.254.0.0是service网段

你可以在节点服务器上运行:

iptables -S -t nat | grep KUBE-SERVICES

来查看转发规则

NodePort: 在集群内部IP的基础上,在集群的每一个节点的端口上开放这个服务。你可以在外部通过<NodeIP>:NodePort地址上访问到这个服务(其中NodeIP是任意节点的ip地址)
LoadBalancer: 在使用一个集群内部IP地址和在NodePort上开放一个服务之外,向云提供商申请一个负载均衡器,会让流量转发到这个在每个节点上以<NodeIP>:NodePort的形式开放的服务上。

四.存储卷(Volume)
1.示例:

spec:
containers:
- name: nginx
image: nginx:alpine
volumeMounts:
- name: web-root
mountPath: /usr/share/nginx/html
volumes:
- name: web-root
nfs:
server: 192.168.2.17
path: /data/nfs

  

2.volume取值
emptyDir: 是在pod分配到node上创建的,初始内容为空;无需指定名称,k8s会自动分配目录.pod移除时,该目录也被删除.
hostPath: 在pod上挂载宿主机上的目录.
nfs: 使用nfs网络文件系统提供的共享目录

五.命名空间
1.k8s默认使用的命名空间是default,使用kubectl get namespaces查看
2.定义命名空间:

apiVersion: v1
kind: namespace
metadata:
name: projectA

  

3.使用命名空间:

apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
namespace: projectA
labels:
name: nginx-pod
spec:
containers:
- name: nginx
....

  

4.namespace可以实现多用户资源隔离

查看所有命名空间下的pods

#kubectl get pods --all-namespaces

  

六.kubectl命令行工具用法
1.语法:
kubectl [command] [TYPE] [NAME] [flags]
(1)command:子命令,用于操作k8s集群资源对象的命令.如create, delete, describe, get, apply
(2)TYPE:资源对象的类型,区分大小写,能以单数形式,复数形式或者简写形式表示.如pod,service,node等
(3)NAME:资源对象的名称,区分大小写,如果不指定,则返回全部.
(4)flags:子命令可选参数,如-s指定apiserver的url地址而不使用默认值

2.输出格式:
输出格式通过-o参数指定

3.操作示例
(1).创建资源对象
根据yaml配置文件创建
kubectl create -f my-service.yaml my-pod.yaml

(2)查看资源对象
kubectl get pod,rc,service

(3)描述资源对象
kubectl describe pods

显示由rc管理的pod信息
kubectl describe pods <rc-name>

(4)删除资源对象
kubectl delete -f my-service.yaml
通过label删除
kubectl delete pods -l name=<label-name>
删除所有
kubectl delte pods --all

(5)执行容器命令
默认使用pod中的第一个容器:
kubectl exec <pod-name> date

指定pod中的容器执行命令:
kubectl exec <pod-name> -c <conatiner-name> date

通过bash获得pod中某个容器的tty,相当于登录容器:
kubectl exec -ti <pod-name> -c <conatiner-name> /bin/bash

6.查看容器日志:
查看容器输出到stdout的日志
kubectl logs <pod-name>
跟踪查看容器的日志,相当于tail -f:
kubectl logs -f <pod-name> -c <conatiner-name>

在k8s中的基本概念的更多相关文章

  1. k8s中label和label selector的基本概念及使用方法

    1.概述 在k8s中,有一个非常核心的概念,就是label(标签),以及对label的使用,label selector. 本文档中,我们就来看看:1.什么是标签,2.如何定义标签,3.什么是标签选择 ...

  2. k8s中几个基本概念的理解,pod,service,deployment,ingress的使用场景

    k8s 总体概览 前言 Pod 副本控制器(Replication Controller,RC) 副本集(Replica Set,RS) 部署(Deployment) 服务(Service) ingr ...

  3. k8s 集群基本概念

    一.概述: kubernetes是google开源的容器集群管理系统,提供应用部署.维护.扩展机制等功能,利用kubernetes能方便管理跨集群运行容器化的应用,简称:k8s(k与s之间有8个字母) ...

  4. Kubernetes之在k8s中部署Java应用

    部署好了k8s以后 部署参考https://www.cnblogs.com/minseo/p/12055731.html 怎么在k8s部署应用 项目迁移到k8s平台是怎样的流程 1,制作镜像 2,控制 ...

  5. k8s中的网络(较详细汇总)

    目录 一.网络前提条件-网络模型 二.需要解决的网络问题 1.容器和容器之间的网络 2.pod与pod之间的网络 同一台node节点上pod和pod通信 不同node节点上pod和pod通信 3.po ...

  6. Docker & k8s 系列三:在k8s中部署单个服务实例

    本章将会讲解: pod的概念,以及如何向k8s中部署一个单体应用实例. 在上面的篇幅中,我们了解了docker,并制作.运行了docker镜像,然后将镜像发布至中央仓库了.然后又搭建了本机的k8s环境 ...

  7. k8s 中的 Pod 细节了解

    k8s中Pod的理解 基本概念 k8s 为什么使用 Pod 作为最小的管理单元 如何使用 Pod 1.自主式 Pod 2.控制器管理的 Pod 静态 Pod Pod的生命周期 Pod 如何直接暴露服务 ...

  8. WebLogic 中的基本概念

    完全引用自: WebLogic 中的基本概念 WebLogic 中的基本概念 上周参加了单位组织的WebLogic培训,为了便于自己记忆,培训后,整理梳理了一些WebLogic的资料,会陆续的发出来, ...

  9. Web开发中的主要概念

    一.Web开发中的主要概念1.静态资源:一成不变的.html.js.css2.动态资源:JavaWeb.输出或产生静态资源.(用户用浏览器看到的页面永远都是静态资源) 3.JavaEE:十三种技术的集 ...

随机推荐

  1. 【转载】万能adapter

    adapter总是自己写,其实使用现成的框架会节省不少代码 原文地址:https://github.com/hongyangAndroid/baseAdapter base-adapter Andro ...

  2. Python3 文件基本修改替换

    现有原文件: Somehow, it seems the love I knew was always the most destructive kind 不知为何,我经历的爱情总是最具毁灭性的的那种 ...

  3. 贪心【CF1029E】Tree with Small Distances

    Description 给定一棵树.要求往树中加入一些边使得从1到其他节点的距离至多是2 . 输出加入边的最小数量.(边全部都是无向的) Input 第一行一个整数n,表示树中的节点个数. 接下来n− ...

  4. Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises) D. Jury Meeting(双指针模拟)

    D. Jury Meeting time limit per test 1 second memory limit per test 512 megabytes input standard inpu ...

  5. Python - 字符和字符值之间的转换

    字符和字符值之间的转换 Python中, 字符和字符值, 直接的转换, 包含ASCII码和字母之间的转换,Unicode码和数字之间的转换; 也可以使用map, 进行批量转换, 输出为集合, 使用jo ...

  6. A/B Problem(大数)

    描述 做了A+B Problem,A/B Problem不是什么问题了吧! 输入 每组测试样例一行,首先一个号码A,中间一个或多个空格,然后一个符号( / 或者 % ),然后又是空格,后面又是一个号码 ...

  7. 阿里云ECS使用SSH连接CentOS 6.9经常断线的问题解决:OperationTimedOut

    说明:不一定有效,可以试一下. 设置: vi /etc/ssh/sshd_config #添加或修改以下配置 ClientAliveInterval #每隔多少秒给SSH客户端发送一次信号 Clien ...

  8. 推荐一套WPF主题皮肤

    在CodePlex上发现了一套WPF的主题皮肤,直接应用于系统自带的控件,一共有四种配色方案,做得也还比较精致.感兴趣的朋友可以使用一下.点击下载      另外一套我比较喜欢的皮肤这里也推荐一下吧: ...

  9. Tikhonov regularization和岭回归

    就实现过程来讲,两者是一样的,都是最小二乘法的改进,对于病态矩阵的正则化,只不过分析的角度不一样,前者是解决机器学习中过拟合问题,机器学习一般是监督学习,是从学习角度来说的,后者是数学家搞的,是为了解 ...

  10. TSQLTableJSON解析JSON

    TSQLTableJSON解析JSON uses mormot rocedure TTestTableContent.SynopseTableVariant;var json: RawUTF8; pe ...