k8s 一小时入门实操(二)

存储

  1. config map,相当于配置中心,当config map 发生改变了,所有引用这个的pod的配置都发生改变
    • 根据文件创建 kubectl create configmap game-config --from-file=filepath , 键名为文件名,键值为文件内容
    • 根据字面值创建, kubectl create configmap special-config --from-literal=special.how=very --from-literal=xx=x
apiVersion: v1
kind: ConfigMap
metadata:
  name: xx
data: 
  x: x
  xx: xx
# 使用
spec:
  containers:
    env:
      - name: test-container
        image: xx
        command: x
        env:
         - name: xxx
           valueFrom:
             configMapKeyRef:
               name: special-config
               key: special.how
    envFrom:
      - configMapRef:
          name: env-config
spec:
  containers:
    volumeMounts:
    - name: config-volume
      mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:  # 这里也可以是secret
        name: special-config  # configmap的名字

可以发现,键名为文件名,键值为文件内容

  1. configMap 热更新 kubectl edit configmap log-config(configmap 名),修改后,容器内的文件就会对应发生修改
  2. secret三种类型 service account,集群内的用户,会放在pod的/run/secrets/kubernetes.io/serviceaccount; opaque base64的secret;kubernetes.io/dockerconfigjson 用来存储docker私有仓库的认证信息
apiVersion: v1
kind: Secret
metadata:
  nmae: mysecret
type: Opaque
data:
  password: base64的内容
  username: base64的用户名
  1. kubectl create secret docker-registry myregistrykey --docker-server=docker hub server --docker-usernmae=docker_user --docker-password=docker_pass --docker-email=xx 创建docker 镜像仓库登录的信息
apiVersion: v1
kind: Pod
metadata: 
  name: foo
spec: 
  containers:
    - nmae: foo
      image: roc/awantyang:v1
  imagePullSecrets:  # docker 登录的账密
    - name: myregistrykey

挂载类型

  1. empty dir
  2. hostpath 只要文件系统能在pod中创建容器,就可以使用其云存储,某些目录可能没有权限写入,需要把主机目录的权限修改成k8s运行的属组,或者是改成任何用户可读写的权限,或者是k8s以root运行,则不需要修改
  3. pv和pvc,创建pod的时候,声明一个pvc,然后pvc会根据配置寻找相关的pv,进行绑定,pv有独立的生命周期,pod重启后数据不丢失
  4. 静态pv和动态pv,静态pv是先创建好pv,等pvc调用,动态pv为,通过pvc进行动态的创建,一般用于云存储
  5. pv和pvc一一对应
apiVersion: v1
kind: persistentVolume
metadata: 
  name: nfspv
spec:
  capacity:
    storage: 1G
  accessModes:
    - ReadWriteOnce
  storageClassName: nfs
  persistentVolumeReclaimPolicy: Retain  # 回收策略
  nfs: 
    path: /nfs  # nfs目录
    server: 192.158.1.1  # nfs服务地址

调度过程

  1. 分为预选和优选
  2. 预选
    • PodFitsResources,查看剩余的资源是否大于pod请求的
    • PodFitsHost,查看nodename
    • PodFitsHostPorts,已使用和申请的port是否匹配
    • PodSelectorMathches,label的匹配情况
    • NoDiskConflict mount的vol和pod指定的vol
    • 如果没有合适的节点就会一直pending
  3. 优选
    • LeastRequestedPriority 通过计算cpu和mem的使用率决定权重
    • BalanceResourse
  4. 亲和和反亲和性,需要各个相关的pod对象运行于同一位置,这个同一位置使用topology key定义,将labelSelector中匹配的pod,部署到包含同一topology的区域内

污点与容忍度

  1. 使节点能够排斥一类特定的pod
  2. taint表示节点不能部署包含这个taint的pod,如果pod上有toleration则表示,这个pod调度到具有匹配的taint节点上。即为我能容忍这个污点,可以往上部署
  3. 污点是设置在node上的,容忍度是设置在pod上的
  4. NoSchedule,表示k8s不会将pod调度到具有该污点的node上
  5. PreferNoSchedule 避免调度到有这个污点的node上
  6. NoExecute 不会调度到node上,并且,已经部署的pod,也会驱逐
  7. 设置污点 kubectl taint nodes node1 key1=value1:NoSchedule
  8. 去除污点 kubectl taint nodes node1 key1:NoSchedule-
  9. 可以使用NodeName和NodeSelector来决定pod部署的node
# 容忍度配置
tolerations:
- key: "key"
  operator: "Equal"
  value: "value"
  effect: "NoSchedule"
  tolerationSeconds: 3600

key、value、effect要与node上设置一致,,tolerationSeconds用于描述当Pod需要被驱逐时可以在Pod上继续保留运行的时间。不指定key和effect表示容忍所有key和effect
有多个master时,可以设置尽量不在这上面执行,kubectl taint nodes Node-name node-role.kubernetes.io/master=:PreferNoSchedule

helm

  1. k8s的应用管理,能动态生成k8s资源清单文件。自动执行k8s资源部署
  2. 包含chart和release,chart是应用信息合集,包括配置模板、参数定义、依赖关系、文档说明等;chart每次运行就是个release,chart可以多次安装到同一集群,生成多个release

helm安装

  1. elf文件,软连到/usr/bin 下即可
  2. 创建sa,用于helm
apiVersion: v1
kind: ServiceAccount
metadata: 
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata: 
  name: tiller
roleRef:
  apigroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller
    namespace: kube-system
  1. helm init --service-account tiller --skip-refresh 配置helm使用的sa

helm自定义模板

  1. 创建文件夹
  2. 创建爱你chart.yaml
# Chart.yaml
name: hello-world
version: 1.0.0
# 创建模板文件 templates/deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata: 
  name: hello-world
spec: 
  replicas: 1
  template:
    metadata: 
      labels:
        app: hello-world
    spec:
      containers:
        - name: hello-world
          image: xx
          ports:
            - containerPort: 8080
              protocol: TCP
# 创建svc配置 templates/service.yaml
  1. helm install
  2. helm list 列出所有release
  3. helm upgrade xxx 更新,会自动实现升级
  4. helm history 查看历史版本
  5. helm status name 查看信息
  6. heml delete xxx 移除release,软删除
  7. helm rollback xx 版本 回滚
  8. helm delete --purge release_name 移除所有指定release的k8s资源及记录,硬删除
  9. helm list --deleted 查看软删除的内容
  10. 通过配置修改chart
# values.yaml
image:
  repository: xx
  tag: xx

# 模板中使用。VAlues对象访问
image: {{.Values.image.repositoiry}}:{{.Values.image.tag}}
  1. 也可以通过helm install --set image.tag='latest' 进行设置 或者helm install --values values.yaml 指定文件引入
  2. 测试是否可以创建 helm install --try-run

dashboard可视化配置管理

  1. helm fetch stable/kubernetes-dashboard
  2. helm install stable/kubernetes-dashboard -n kubernetes-dashboard --namespace kube-system -f kubernetes-dashboard.yaml
  3. 访问需要用kube/config文件或者是导入一个token,kubectl -n kube-system get secret | grep dashboard-token 得到名字,然后kubectl describe secret name

集群监控

  1. kubectl top node/pod 查看节点的top情况,需要kubernetes或者metric 插件支持
  2. prometheus有自己DSL语言
  3. 可视化监控界面 grafana

动态伸缩

  1. kubectl run php-apache --image=xxx --requests=cup=200m --expose --port=80 限制运行的cpu
  2. kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10 最少一个,最多10个

资源限制

  1. request为初始化大小,limit是限制
spec: 
  containers:
  - image: xxx
    imagePullPolicy: Always
    name: auth
    ports:
    - containerPort: 80
      protocol: TCP
  resources:
    limits:
      cpu: "100m"
      memory: "2g"
  1. quota, 资源限制的合集
apiVersion: v1
kind: ResourceQuota
metadata: 
  name: c
  namespace: s
spec:
  hard:
    pods: "20"  # 20个pod的总资源限制 只能创建20个pod
    requests.cpu: "2"
    requests.memory: 100G
    limits.cpu: 40
    limits.memory: 200G
    configmaps: 10  # 只能创建10个config map
    persistentvolumeclaims: 3 # pvc格式
    secrets: 10
    services: 10
    services.loadbalancers: 3 # LB个数
  1. pod创建如果没有限制资源,则会使用ns下的最大资源,如果ns也没有限制,则使用集群的最大资源,使用limitRange设置默认值
kind: LimitRange
spec:
  limits:
  - default:
    memory: 100G
    cpu: 5
  defalutRequest:
    memeory: 10G
    cpu: 1
  type: Container # 定义为容器的默认值

efk

  1. es fluentd k

k8s高可用

  1. controller Schedule 如果存在多个,只有一个工作,其他挂起,自动实现了高可用
  2. etcd会形成集群部署,实现高可用
  3. 方案,冗余部署nginx或者ha等负载均衡器,发往apiserver的请求都经过负载均衡器的代理,实现多个apiserver的高可用

安全

  1. http token,token放在header中去请求api server,token对应的用户名放在apiserver可以访问你的文件里
  2. http base
  3. https 双向认证,客户端和服务端分别向api server申请ca证书,进行tls的双向认证
  4. 需要认证的资源
    • 默认情况下,通过127.0.0.1进行本机访问的,不是用https,可以在配置里进行关闭
    • kubectl kubelet kubeproxy 外部王文需要双向认证
  5. kubeconfig为集群的配置文件,包含集群参数,ca证书,apiserver 地址,客户端参数,集群context信息,kubernetes启动时指定不同的kubeconfig文件切换不同的集群
  6. pod动态创建,如果使用证书会频繁申请创建证书,所以pod使用sa进行访问
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容