美文网首页
k8s 一小时入门实操(二)

k8s 一小时入门实操(二)

作者: mafa1993 | 来源:发表于2023-03-02 20:20 被阅读0次

存储

  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进行访问

相关文章

  • SEO快速入门,看这篇就够了

    SEO快速入门,看这篇就够了(网站实操新手指南) ...

  • 实操Redission

    实操Redission 分布式对象(一)实操Redission 分布式Map集合(二)实操Redission 分布...

  • HTML入门实操

    今天呢就把HTML入门做的一个小网页分享给大家,希望多给我提提意见!

  • docker 入门实操

    使用阿里镜像 安装/升级你的Docker客户端 安装/升级你的Docker客户端 操作配置完成之后:运行docke...

  • Docker入门实操

    Docker 开源容器引擎 该文属原创,是作者亲自一步一步实操总结而来,欢迎留下宝贵意见 Go语言编写 三大要素:...

  • Druid入门实操

    https://imply.io/get-started[https://imply.io/get-started]

  • 生信星球学习记录Day2-HEYi😛

    Linux 基本命令 实操一 实操二 实操三3 实操四 练习题 如何输出长格式列表,以及显示文件大小ls -l ...

  • VMware中玩centos遇到的问题

    今天为实操 k8s,安装 vmware 及 centos 系统。以下是各解决问题 下载 centos 最小版 ce...

  • 学习合伙人

    【学习合伙人】实操零基础入门指南,从产品制度到工具实操,手把手带教,让你30分钟,快速上手>推广赚钱!

  • TensorFlow深度学习的第一门课程

    教程取自于Google官方课程之TensorFlow 入门实操课程[https://www.icourse163....

网友评论

      本文标题:k8s 一小时入门实操(二)

      本文链接:https://www.haomeiwen.com/subject/msajldtx.html