k8s 使用

声明:所有文章只作为学习笔记用,转载非原创

#官方
https://kubernetes.io/zh/docs/concepts/services-networking/dns-pod-service/

#k8s 权威指南4版本 源码
https://github.com/kubeguide?tab=repositories 
http://www.lingocn.com/ebook/24957.html  书地址
注:Node、Pod、Replication Controller和Service等都可以看作是一种“资源对象”,几乎所有的资源对象都可以通过Kubernetes提供的kubectl工具执行增、删、改、查等操作并将其保存在ectd中持久化存储。

#Kubernetes in Action笔记—k8s简介
https://zhuanlan.zhihu.com/p/153274239
#restful
https://www.jianshu.com/p/dbee5199cf23
REST,表示性状态转移(representation state transfer)。简单来说,就是用URI表示资源,用HTTP方法(GET, POST, PUT, DELETE)表征对这些资源的操作。
Resource: 资源,即数据,存在互联网上的可被访问的实体
Representation: 数据的某种表现形式,如HTML, JSON。
State Transfer:状态变化,HTTP方法实现
 
#笔记
[https://blog.csdn.net/u013541707/article/details/107342820/](https://blog.csdn.net/u013541707/article/details/107342820/)


#权限rabc
 https://www.jianshu.com/p/a1a0d64f1245 
 https://mritd.me/2018/03/20/use-rbac-to-control-kubectl-permissions/ 
kubectl get serviceaccounts
https://note.abeffect.com/articles/2019/08/26/1566807667654.html 

#ci cd 持续集成 持续交付
持续集成Continuous Integration(CI)和持续交付Continuous Delivery(CD)
“持续”用于描述遵循我在此提到的许多不同流程实践。这并不意味着“一直在运行”,而是“随时可运行”。在软件开发领域,它还包括几个核心概念/最佳实践。这些是:
#c10k c10m 
http://www.52im.net/thread-561-1-1.html 


#ospf 
  rip 最大16跳
  spf 算法 ,最短路由
 https://www.zhihu.com/question/331021238  什么是BGP

#学习笔记
Endpoint(IP+Port)标识服务进程的访问点;
Horizontal Pod Autoscaler(HPA)
意思是Pod横向自动扩容,目标是实现自动化、智能化扩容或缩容。

https://blog.csdn.net/keysilence1/article/details/70239717?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase 

#docker 网络
http://dockone.io/article/2941 
网络实验 必须  要做
https://blog.csdn.net/WangDong_CNDS/article/details/94178558 
https://github.com/mz1999/blog/blob/master/docs/docker-network-bridge.md

#浅析沙箱机制(Sandboxie)
[https://m.qukuaiwang.com.cn/news/14003.html](https://m.qukuaiwang.com.cn/news/14003.html)


#ip和端口

Node IP
Node节点的IP地址,是Kubernetes集群中每个节点的物理网卡的IP地址,是真是存在的物理网络,所有属于这个网络的服务器之间都能通过这个网络直接通信;
Pod IP
Pod的IP地址,是Docker Engine根据docker0网桥的IP地址段进行分配的,通常是一个虚拟的二层网络,位于不同Node上的Pod能够彼此通信,需要通过Pod IP所在的虚拟二层网络进行通信,而真实的TCP流量则是通过Node IP所在的物理网卡流出的;
 Cluster IP
Service的IP地址。特性如下:
仅仅作用于Kubernetes Servcie这个对象,并由Kubernetes管理和分配IP地址;
无法被Ping,因为没有一个“实体网络对象”来响应;
只能结合Service Port组成一个具体的通信端口;
Node IP网、Pod IP网域Cluster IP网之间的通信,采用的是Kubernetes自己设计的一种编程方式的特殊的路由规则,与IP路由有很大的不同;

## [KUBERNETES NODEPORT、TARGETPORT、PORT、CONTAINERPORT图解](https://www.cnblogs.com/faithH/p/12103713.html)
nodeport : 外部机器可访问的端口。
targetport: 容器的端口(最终的流量端口)。targetPort是pod上的端口
port:  kubernetes中的服务之间访问的端口






# iptables
 https://zhuanlan.zhihu.com/p/94418251?from_voters_page=true  
https://www.cnblogs.com/ajianbeyourself/p/4225176.html 
http://www.zsythink.net/archives/tag/iptables/page/2/  #结合命令


#华为负载
[https://zhuanlan.zhihu.com/p/37230013](https://zhuanlan.zhihu.com/p/37230013)
因此可以认为Kubernetes的Service就是一个四层负载均衡,Kubernetes对应的还有七层负载均衡Ingress


#命令doc
http://docs.kubernetes.org.cn/475.html 
资源包括(不区分大小写):
pod(po),service(svc),replication controller(rc),deployment(deploy),replica set(rs 下一代rc)


Kubesphere 与 Rancher 有什么区别?
https://www.zhihu.com/question/348609092/answer/874540259 
 
帮助
kubectl api-resources
 kubectl explain pod

 https://www.cnblogs.com/lyc94620/p/10945505.html 
----------------------其它知识点总结
#简介
 https://my.oschina.net/jamesview/blog/2994112 
#工作流程
 https://www.cnblogs.com/justmine/p/8684564.html 
#基础名词概念 知识点总结
https://blog.csdn.net/wenjianfeng/article/details/93347306
https://www.cnblogs.com/surpassme/p/9357470.html  ip 地址
https://blog.csdn.net/jacksonary/article/details/94405793?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.nonecase 



 


 # rest api介绍
 https://leancloud.cn/docs/rest_api.html#hash696781505 rest api 测试
 https://blog.csdn.net/huakai_sun/article/details/82378856 

 https://www.jianshu.com/p/75389ea9a90b
 https://www.liaoxuefeng.com/wiki/1022910821149312/1105003357927328 
编写REST API,实际上就是编写处理HTTP请求的async函数,不过,REST请求和普通的HTTP请求有几个特殊的地方:

REST请求仍然是标准的HTTP请求,但是,除了GET请求外,POST、PUT等请求的body是JSON数据格式,请求的Content-Type为application/json;
REST响应返回的结果是JSON数据格式,因此,响应的Content-Type也是application/json。
好处:
1、轻量,直接通过http,不需要额外的协议,通常有post/get/put/deletec操作。
2、面向资源,一目了然,具有自解释性
3、数据描述简单,一般通过json或者xml做数据通讯
rest的概括
所谓"资源",就是网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在。你可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的URI。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的识别符。
#bgp
 边界网关协议是不同自治系统路由器之间进行通信的外部网关协议,作为EGP替代品。BGP系统之间交换网络的可达到信息。这些信息包括数 据到达这些网络所必须经过的自治系统AS中的所有路径,通过这些信息构造自治系统链接图,然后根据连接图删除选路环,制定选路策略。

#veth
https://blog.csdn.net/sld880311/article/details/77650937 


#url uri 还有java中的url 和uri
 https://help.aliyun.com/document_detail/109195.html 
 https://blog.csdn.net/koflance/article/details/79635240 
-- 标识互联网上的内容 
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web 


回到Web上,假设所有的Html文档都有唯一的编号,记作html:xxxxx,xxxxx是一串数字,即Html文档的身份证号码,这个能唯一标识一个Html文档,那么这个号码就是一个URI。
而URL则通过描述是哪个主机上哪个路径上的文件来唯一确定一个资源,也就是定位的方式来实现的URI。
对于现在网址我更倾向于叫它URL,毕竟它提供了资源的位置信息,如果有一天网址通过号码来标识变成了[http://741236985.html](https://link.zhihu.com/?target=http%3A//741236985.html),那感觉叫成URI更为合适,不过这样子的话还得想办法找到这个资源咯…


URI = Universal Resource Identifier 统一资源标志符,用来标识抽象或物理资源的一个紧凑字符串。
URL = Universal Resource Locator 统一资源定位符,一种定位资源的主要访问机制的字符串,一个标准的URL必须包括:protocol、host、port、path、parameter、anchor。
URN = Universal Resource Name 统一资源名称,通过特定命名空间中的唯一名称或ID来标识资源。
 

#REST全称
即Representational State Transfer的缩写。我对这个词组的翻译是"表现层状态转化"。
#etcd 作用
简单:基于http+json的api让你用curl命令就可以轻松使用。
安全:可选SSL客户认证机制。
快速:每个实例每秒支持一千次写操作。
可信:使用Raft算法充分实现了分布式。
 
#认证 
ca-key.pem(私钥)和ca.pem(证书),还会生成ca.csr(证书签名请求)
https://www.jianshu.com/p/00b02889ce49 
https://www.jianshu.com/p/bb973ab1029b 
https://zhuanlan.zhihu.com/p/91319685
https://zhuanlan.zhihu.com/p/142990931
[https://segmentfault.com/q/1010000020917744](https://segmentfault.com/q/1010000020917744)
[https://www.jianshu.com/p/bb973ab1029b](https://www.jianshu.com/p/bb973ab1029b)# kubernetes认证授权机制

 通俗理解数字签名,数字证书和https
 [https://www.jianshu.com/p/4932cb1499bf](https://www.jianshu.com/p/4932cb1499bf)
#数字签名
是不是觉得数字签名不过如此。其实就是利用算法(不一定是非对称算法)对原文hash值加密,然后附着到原文的一段数据。数字签名的作用就是验证数据来源以及数据完整性!解密过程则称为数字签名验证。
非对称加密:把密钥分为公钥和私钥,公钥是公开的所有人都可以认领,私钥是保密的只有一个人知道。
1.A先对这封Email执行哈希运算得到hash值简称“摘要”,取名h1
2.然后用自己私钥对摘要加密,生成的东西叫“数字签名”
#数字证书[https://www.jianshu.com/p/4932cb1499bf](https://www.jianshu.com/p/4932cb1499bf)

1 首先A去找"证书中心"(certificate authority,简称CA),为公钥做认证。证书中心用自己的私钥,对A的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate):
2 A在邮件正文下方除了数字签名,另外加上这张数字证书
 证书类型
x509的证书编码格式有两种
1.PEM(Privacy-enhanced Electronic Mail) 是明文格式的 以 -----BEGIN CERTIFICATE-----开头,已-----END CERTIFICATE-----结尾,中间是经过base64编码的内容,apache需要的证书就是这类编码的证书 查看这类证书的信息的命令为 :openssl x509 -noout -text -in server.pem
其实PEM就是把DER的内容进行了一次base64编码
2.DER 是二进制格式的证书 查看这类证书的信息的命令为 :openssl x509 -noout -text -inform der -in server.der

扩展名:
.crt 证书文件 ,可以是DER(二进制)编码的,也可以是PEM( ASCII (Base64) )编码的 ,在类unix系统中比较常见
.cer 也是证书 常见于Windows系统 编码类型同样可以是DER或者PEM的,windows 下有工具可以转换crt到cer
.csr 证书签名请求 一般是生成请求以后发送给CA,然后CA会给你签名并发回证书
.key 一般公钥或者密钥都会用这种扩展名,可以是DER编码的或者是PEM编码的 查看DER编码的(公钥或者密钥)的文件的命令为 openssl rsa -inform DER -noout -text -in xxx.key 查看PEM编码的(公钥或者密钥)的文件的命令为 openssl rsa -inform PEM -noout -text -in xxx.key
.p12 证书 包含一个X509证书和一个被密码保护的私钥

(https://www.jianshu.com/p/6815dd265d16)
实际上,数字证书就是经过CA认证过的公钥


#openssl 
 https://blog.csdn.net/xxb249/article/details/79449434 


--------------------------其它知识点


#k8s 内部结构知识点

节点 (Master node and Worker node)
节点通常指的就是服务器,在k8s中有两种节点:管理节点(Master Node)和工作节点(Worker Node)
管理节点(Master Node):负责管理整个k8s集群,一般由3个管理节点组成HA的架构。
工作节点(Worker Node):主要负责运行容器。

命名空间 (Namespace)
k8s命名空间主要用于隔离集群资源、隔离容器等,为集群提供了一种虚拟隔离的策略;默认存在3个名字空间,分别是默认命名空间 default、系统命名空间 kube-system 和 kube-public。

Object
k8s 对象(Object)是一种持久化存储并且用于表示集群状态的实体。k8s 对象其实就是k8s自己的配置协议,总之我们可以通过定义一个object让k8s根据object定义执行一些部署任务、监控任务等等。

POD
Pod是 Kubernetes 部署应用或服务的最小的基本单位。一个Pod 封装多个应用容器(也可以只有一个容器)、存储资源、一个独立的网络 IP 以及管理控制容器运行方式的策略选项。
副本集 (Replica Set,RS)
是一种控制器,负责监控和维护集群中pod的副本(replicas)数,确保pod的副本数是我们期望的样子。
Pod是一组紧密关联的容器集合,它们共享的PID、IPC、Network和UTS namespace,是Kubernetes调度的基本单位。Pod的设计理念是支持多个容器在一个Pod中共享网络和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。

部署 (Deployment)
表示对k8s集群的一次更新操作,是k8s集群中最常用的Object,主要用于部署应用。支持滚动升级。

服务 (service)
是对应用的抽象,也是k8s中的基本操作单元,一个服务背后由多个pod支持,服务通过负载均衡策略将请求转发到容器中。

Ingress
是一种网关服务,可以将k8s服务通过http协议暴露到外部。

无状态应用 & 有状态应用
无状态应用指的是应用在容器中运行时候不会在容器中持久化存储数据,应用容器可以随意创建、销毁;如果一个应用有多个容器实例,对于无状态应用,请求转发给任何一个容器实例都可以正确运行。例如:web应用
有状态应用指的是应用在容器中运行时候需要稳定的持久化存储、稳定的网络标识、固定的pod启动和停止次序。例如:mysql数据库

#k8s 证书相关  https://www.jianshu.com/p/944f2003c829 
kubelet证书比较特殊,不是手动生成,它由node节点TLS BootStrap向apiserver请求,由master节点的controller-manager 自动签发,包含一个client cert 和一个server cert

#cidr
https://www.cnblogs.com/hark0623/p/6547432.html 
https://www.zhihu.com/question/66204207  关于cidr 的理解
CIDR中文全称是无分类域间路由选择,英文全称是Classless Inter-Domain Routing,在平常,大家多称之为无分类编址,它也是构成超网的一种技术实现。CIDR在一定程度上解决了路由表项目过多过大的问题。CIDR之所以称为无分类编址,就是因为CIDR完全放弃了之前的分类IP地址表示法,它真正消除了传统的A类、B类、C类地址以及划分子网的概念,它使用如下的IP地址表示法:

Pod(容器组)是K8s集群中所有业务类型的基础,可以看作运行在K8s集群中的小机器人,不同类型的业务就需要不同类型的小机器人去执行。目前K8s中的业务主要可以分为长期伺服型(long-running)、批处理型(batch)、节点后台支撑型(node-daemon)和有状态应用型(stateful application);分别对应的小机器人控制器为Deployment、Job、DaemonSet和PetSet(之前版本pod的概念)
 
 # object 
k8s主要通过Object定义各种部署任务(例如:部署应用、部署Ingress路由规则、部署service等等),通过kubectl命令远程操作k8s集群。
Object的定义通常以Yaml格式进行描述。

#Yaml是一种直观的数据序列化格式,主要通过缩进的方式组织数据。
定义好object文件后就可以通过kubectl命令将object发送给k8s服务器执行。

#ReplicationController ReplicaSet Deployment
新版本用rs 取代 rc
rc 和 rs 是一样的,rs支持集合式的selector 
建议用deployment 来自动管理 rs , 比如rs不支持 rolling-update 但是deployment 支持
(deployment 会创建rs ,实现动态更新pod 的功能)
hpa : 平滑扩展(基于rs 和dep来定义),监控pod的资源利用率,如果超过资源阀值水平自动扩展

#请求是软限制
请求:一个容器请求的资源数量。如果一个容器超过了它的资源请求,它可能会被压制回到它的请求数。
限额:容器能使用的资源上限


docker 主要实现了无状态服务 比如 apache lvs
            有状态服务比如 mysql memcache
statefulset : 解决有状态服务问题
                     1 有状态持久化存储 稳定网络标志 有序部署 有序收缩
dep和 rs 是解决无状态服务

#daemonset
DaemonSet是Kubernetes中用户最常用的对象之一,我们用它来部署Nodes上守护应用,比如日志组件、节点监控组件等。
典型应用场景:

每个节点运行日志收集服务 elk fluented
每个节点运行监控服务  zabbix prometheus
每个中运行网络插件、存储插件 glusterd ceph

#job  :保证批处理脚本的正常运行
负责批处理,即仅执行一次任务,保证批处理任务的一个或多个pod 成功结束。
corn job 管理基于时间的job 

#service  node  ingress  pod与pod 之间
通过标签来管理 pod , 通过 一些算法RR轮询访问 (IP+端口) 就能访问到pod

#k8s 是扁平化的网络空间
所有的pod 都可以通过ip 直接访问(当然还是有转换机制)
同一个pod 内多个容器: 通过 localhot 访问  共用pause容器
不同pod 的通讯 : overlay network 全覆盖
                                 flannel 是coreos 团队开发,实现overlay (覆盖网络)功能的插件
pod 与service 之间: iptables ipvsadm

#yaml 
不管是docker openstack k8s 都是用yaml文件来配置的
 http://www.imooc.com/article/280085  yaml的定义
 http://www.imooc.com/wenda/detail/584802 yaml 与json的区别
从技术上讲,YAML是JSON的超集。这意味着,至少在理论上,YAML解析器可以理解JSON,但不一定相反。
YAML使用空格缩进,这是Python开发人员熟悉的领域、JavaScript开发人员喜欢JSON,因为它是JavaScript的一个子集等等吧
 

YAML是一种人类可读的、专门用于配置信息的文本格式,例如,在本文中,我们将使用YAML定义创建第一个Pod,然后是Deployment。YAML可以理解为Yet Another Markup Language的缩写,也可以理解为"YAML Ain’t Markup Language"的缩写,这取决于你问的是谁。

#两大主流开源分布式存储的对比:GlusterFS vs. Ceph
 https://blog.csdn.net/CloudXli/article/details/79681699 
 https://blog.csdn.net/weiyuefei/article/details/78270318 
 https://www.jianshu.com/p/25163032f57f ceph 介绍及运行原理 



#基础命令操作
https://www.cnblogs.com/klvchen/p/9901152.html 
https://www.orchome.com/1259 
https://blog.csdn.net/andriy_dangli/article/details/79269356 
https://zhuanlan.zhihu.com/p/122524142 
https://www.cnblogs.com/miclesvic/articles/10997060.html 
https://blog.csdn.net/u011095110/article/details/83545350 
https://www.kubernetes.org.cn/doc-64
https://www.cnblogs.com/FJLHP/p/13206003.html 
https://blog.csdn.net/miss1181248983/article/details/88130576





kubectl get cs                          # 查看集群状态
kubectl get nodes                       # 查看集群节点信息
kubectl get ns                          # 查看集群命名空间
kubectl get svc -n kube-system          # 查看指定命名空间的服务
kubectl get pod  -o wide      # 查看Pod详细信息
kubectl get pod  -o yaml      # 以yaml格式查看Pod详细信息
kubectl get pods                        # 查看资源对象,查看所有Pod列表
kubectl get rc,service                  # 查看资源对象,查看rc和service列表
kubectl get pod,svc,ep --show-labels    # 查看pod,svc,ep能及标签信息
kubectl get all --all-namespaces        # 查看所有的命名空间

kubectl cluster-info            # 查看集群状态信息
kubectl describe 描述资源对象
kubectl describe nodes   # 显示Node的详细信息
kubectl describe pods/    # 显示Pod的详细信息
kubectl scale pod扩容与缩容

kubectl scale deployment nginx --replicas 5    # 扩容
kubectl scale deployment nginx --replicas 3    # 缩容
创建 deployment
# 通过 kuectl run 命令来创建一个 deployment 
#nginx-deploy表示deployment的名称 --image表示镜像的地址 --port表示pod暴露的端口 --replicas表示副本的个数 --dry-run表示测试,不真正执行命令
kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80 --dry-run=true
# 查看 deployment
kubectl get deployment
# 查看 pod
kubectl get pods 或 kubectl get pods -o wide
删除 pod
# kubectl delete 删除 pod
kubectl delete pods  nginx-deploy-5b595999-zp4b4
提示
当我们再查看时,发现 pod 删除后自动再创建了,而且所在的节点也改变了,对应的 pod 的 ip 也改变了
kubectl expose deployment nginx-deploy --name=nginx --port=80 --protocol=TCP

# 查看 service
kubectl get svc

# 取得确认对象的详细信息
kubectl describe svc nginx
##查看replicaset  
kubectl get rs

# 可以通过 edit 把 ClusterIP 改成 NodePort,然后通过所有的物理机IP进行访问
kubectl edit svc nginx
我们使用集群中的任何服务器访问 curl 10.98.120.192 获得 nginx 的内容,即使 pod 删除后再重建
疑问: https://blog.csdn.net/liyingke112/article/details/76022267 
service ip 不应该能访问到,这个只是作为ipvsadm 或iptables 规则做

kubectl api-versions
#创建servicehttps://blog.csdn.net/wenjianfeng/article/details/93346056

① v1 是 Service 的 apiVersion。
② 指明当前资源的类型为 Service。
③ Service 的名字为 httpd-svc。
④ selector 指明挑选那些 label 为 run: httpd 的 Pod 作为 Service 的后端。
⑤ 将 Service 的 8080 端口映射到 Pod 的 80 端口,使用 TCP 协议。
# kubectl describe service httpd-svc
 https://blog.csdn.net/liyingke112/article/details/76022267 

kubectl get deployment --namespace=kube-system
coredns 是一个 DNS 服务器。每当有新的 Service 被创建,coredns 会添加该 Service 的 DNS 记录。Cluster 中的 Pod 可以通过 . 访问 Service。

#kubectl get namespaces 操作
https://blog.csdn.net/liumiaocn/article/details/100797371 
https://liumiaocn.blog.csdn.net/article/details/100537187 

默认namespace 这样在实际的PaaS平台中所需要的“租户”的能力,很多小型的需求下都是以namespace为中心进行封装和隔离的。

default 缺省的namespace,对于没有指定namespace的对象缺省会在此处进行管理
kube-system Kubernetes系统所创建的对象在此namespace中进行管理
kube-public 此namespace对所有用户均为可读(包括通过认证的用户)。此namespace的存在实施一种约定,并非为必选项。
 



#pod yaml 文件 解析
 https://blog.csdn.net/heian_99/article/details/104161525 

Kubernetes中的Pod一般都是采用yaml编写

apiVersion: group/apiversion  # 如果没有给定 group 名称,那么默认为 core,可以使用 kubectl api-versions # 获取当前 k8s 版本上所有的 apiVersion 版本信息( 每个版本可能不同 )
kind:       #资源类别
metadata:  #资源元数据
   name
   namespace
   lables
   annotations   # 主要目的是方便用户阅读查找
spec: # 期望的状态(disired state)
status:# 当前状态,本字段有 Kubernetes 自身维护,用户不能去定义

#正确删除一个pod 
https://www.cnblogs.com/effortsing/p/10496547.html 

#yaml 文件解析
https://www.cnblogs.com/lgeng/p/11053063.html
大小写敏感
使用缩进表示层级关系
缩进时不允许使用Tal键,只允许使用空格
缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
”#” 表示注释,从这个字符一直到行尾,都会被解析器忽略  
在Kubernetes中,只需要知道两种结构类型即可:

Lists ; List即列表,说白了就是数组
Maps: 即一个Key:Value 的键值对信息

示例:当然Lists的子项也可以是Maps,Maps的子项也可以是List
apiVersion: v1 
kind: Pod
metadata:
  name: kube100-site   
  labels:
    app: web                                    ---map
spec:
  containers:      
    - name: front-end                        -----list 破折号(-)开头
      image: nginx 
      ports:
        - containerPort: 80
    - name: flaskapp-demo
      image: jcdemo/flaskapp
      ports: 8080

kind: ReplicationController
metadata:
  name: myweb
spec:
# Pod的数量
  replicas: 1
# spec.selector与spec.template.metadata.labels,这两个字段必须相同,否则下一步创建RC会失败。
  selector:
    app: myweb
  template:
    metadata:
      labels:
        app: myweb
#容器组的定义
    spec:
      containers:
# 容器名称
        - name: myweb
# 容器对应的镜像
          image: kubeguide/tomcat-app:v1
          ports:
# 在8080端口上启动容器进程,PodIP与容器端口组成Endpoint,代表着一个服务进程对外通信的地址
          - containerPort: 8080
          env:
#此处如果在未安装域名解析的情况下,会无法将mysql对应的IP解析到env环境变量中,因此先注释掉!
#          - name: MYSQL_SERVICE_HOST
#            value: 'mysql'
          - name: MYSQL_SERVICE_PORT
            value: '3306'
 

#lable selector
这些为最终用户添加标签的必须要指定一个前缀,Kuberentes.io 前缀是为Kubernetes 内核部分保留的。

#RBAC(Role Base Access Control) 爬坑
https://blog.csdn.net/u011181610/article/details/81981713
https://blog.csdn.net/ywq935/article/details/84840935 

#密码和账户方面的命令 
https://www.sharpcode.cn/devops/kubernetes-authn-authz/ 
所有的安全问题都是针对API SERVER而言的,因为它提供了管理集群的唯一接口。API SERVER使用https协议工作,使数据传输更加安全,传输内容不容器被窃听
#访问控制 身份认证  授权
https://mp.weixin.qq.com/s?__biz=MzIyMTUwMDMyOQ==&mid=2247491883&idx=1&sn=567ec23ef246a668154b7f9b45ab1ade&chksm=e83967eddf4eeefb96baebde71e97943281f80f80957b8c9c0821fa988ccd4ceb231e0270edd&scene=21#wechat_redirect 

https://mp.weixin.qq.com/s?__biz=MzIyMTUwMDMyOQ==&mid=2247491907&idx=1&sn=42e0e73fc93f5c42122d7e9c1f3ebfcf&chksm=e8396785df4eee93cd9ef722d7c1f132801b65e9df0cd5320bcfbb8af2af2454983b8eab612c&scene=21#wechat_redirect 

https://mp.weixin.qq.com/s?__biz=MzIyMTUwMDMyOQ==&mid=2247491979&idx=1&sn=7ac58a4be632022af0dc5e6a41a630d4&chksm=e839674ddf4eee5b110e8293d37c73d882dad609ebfdbabe2248d731799cfa56b7a3c22d081a&scene=21#wechat_redirect

 kubectl cluster-info
除了TLS加密之外,另外两个是:
认证(Authentication)
授权(Authorization)
认证是为了识别访问者是谁,是否是一个合法的用户,而授权则决定用户可以干什么,拥有什么权限。

ServiceAccount中主要保存的信息就是一个令牌(token),令牌格式就是JWT(json web token)。JWT本身并不是Kubernetes中的概念,详细请参考[JWT](https://jwt.io/introduction/)
当kubernetes集群搭建好后,系统中就存在多个ServiceAccount,它们隶属于不同的名称空间,不同名称空间之间的ServiceAccount名称可以相同。通过下面的命令查看当前系统的ServiceAccount

kubectl get serviceaccounts
kubectl get serviceaccounts --all-namespaces 

kubectl -n kube-system get sa
kubectl -n kube-system get sa kuboard-user
kubectl -n kube-system get sa kuboard-user -o yaml

kubectl get secrets default-token-fdrr6 -o yaml
- name: kuboard-user-token-g7b4z
kubectl get secrets kuboard-user-token-g7b4z
kubectl get secrets kuboard-user-token-g7b4z -n kube-system -o yaml
#日志级别
kubectl get pods --v 6


#挂载文件、卷的应用
 https://www.cnblogs.com/hahp/p/6760981.html  
 https://zhuanlan.zhihu.com/p/128552232 


# 跨namespace空间
https://blog.csdn.net/ouyangtianhan/article/details/85107967 
cgroup
https://www.jianshu.com/p/64230e3b6e6c

#kubectl 命令创建pod 过程
https://www.cnblogs.com/panwenbin-logs/p/9875843.html 


#label selector
基于集合的selector
https://www.cnblogs.com/521football/p/10405208.html
Label Selector示例:select * from pod where pod’s name=’XXX’,env=’YYY’,支持操作符有=、!=、in、not in;
给某个资源定义一个Label,相当于给他打一个标签,随后可以通过Label Selector(标签选择器)查询和筛选拥有某些Label的资源对象。
Replica Set
下一代的Replication Controlle,Replication Controlle只支持基于等式的selector(env=dev或environment!=qa)但Replica Set还支持新的、基于集合的selector(version in (v1.0, v2.0)或env notin (dev, qa)),这对复杂的运维管理带来很大方便。
 
Horizontal Pod Autoscaler(HPA)
意思是Pod横向自动扩容,目标是实现自动化、智能化扩容或缩容。

每个Pod可以设置限额的计算机资源有CPU和Memory;
Requests,资源的最小申请量;
Limits,资源最大允许使用的量;






你可能感兴趣的:(k8s 使用)