Kubernetes (k8s)v1.27.1版本安装步调

打印 上一主题 下一主题

主题 1003|帖子 1003|积分 3019







一、k8s 安装步调

1.1 安装docker及containerd容器

  1. #前提.设置每个机器自己的hostname
  2. hostnamectl set-hostname xxx
  3. # 1.移除docker
  4. sudo yum remove docker \
  5.                   docker-client \
  6.                   docker-client-latest \
  7.                   docker-common \
  8.                   docker-latest \
  9.                   docker-latest-logrotate \
  10.                   docker-logrotate \
  11.                   docker-engine
  12. # 2.安装yum-utils包(它提供了yum-config-manager实用程序)并设置存储库。               
  13. sudo yum install -y yum-utils
  14. sudo yum-config-manager \
  15.     --add-repo \
  16.     https://download.docker.com/linux/centos/docker-ce.repo  
  17.       
  18. # 3.安装 Docker 引擎、容器和 Docker 组合:
  19. sudo yum install -y docker-ce-20.10.23 docker-ce-cli-20.10.23 containerd.io-1.6.15
  20. #以下是在安装k8s的时候使用
  21. # yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7  containerd.io-1.4.6
  22. #        4.启动&开机启动docker
  23. systemctl enable docker --now
  24. # 5.docker加速配置
  25. sudo mkdir -p /etc/docker
  26. sudo tee /etc/docker/daemon.json <<-'EOF'
  27. {
  28.   "registry-mirrors": ["https://wkxfupsi.mirror.aliyuncs.com"],
  29.   "exec-opts": ["native.cgroupdriver=systemd"],
  30.   "log-driver": "json-file",
  31.   "log-opts": {
  32.     "max-size": "100m"
  33.   },
  34.   "storage-driver": "overlay2"
  35. }
  36. EOF
  37. # 6.后台程序重新加载
  38. sudo systemctl daemon-reload
  39. # 7.启动Docker
  40. sudo systemctl restart docker
  41. # 8.通过运行hello-world镜像来验证Docker引擎安装是否成功。
  42. sudo docker run hello-world
复制代码
1.2、设置每台服务器的参数

  1. #1.设置每个机器自己的hostname
  2. hostnamectl set-hostname xxx
  3. #2.将 SELinux 设置为 permissive 模式(相当于将其禁用)
  4. sudo setenforce 0
  5. sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
  6. #3.关闭swap
  7. swapoff -a  
  8. sed -ri 's/.*swap.*/#&/' /etc/fstab
  9. #4.转发 IPv4 并让 iptables 看到桥接流量
  10. cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
  11. overlay
  12. br_netfilter
  13. EOF
  14. sudo modprobe overlay
  15. sudo modprobe br_netfilter
  16. #5.设置所需的 sysctl 参数,参数在重新启动后保持不变
  17. cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
  18. net.bridge.bridge-nf-call-iptables  = 1
  19. net.bridge.bridge-nf-call-ip6tables = 1
  20. net.ipv4.ip_forward                 = 1
  21. EOF
  22. #6.应用 sysctl 参数而不重新启动
  23. sudo sysctl --system
复制代码
1.3、安装kubelet、kubeadm、kubectl

  1. #1.配置k8s的yum源地址
  2. cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
  3. [kubernetes]
  4. name=Kubernetes
  5. baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
  6. enabled=1
  7. gpgcheck=1
  8. gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
  9.    http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  10. EOF
  11. # 2.查看kubernetes版本
  12. # yum list kubelet kubeadm kubectl  --showduplicates | sort -r
  13. #3.安装 kubelet,kubeadm,kubectl
  14. # sudo yum install -y kubelet-1.27.1 kubeadm-1.27.1 kubectl-1.27.1
  15. # 3.1 为了安装kuberspher 安装1.24.6版本
  16. sudo yum install -y kubeadm-1.24.6 kubectl-1.24.6 kubelet-1.24.6
  17. #4.启动kubelet
  18. sudo systemctl enable --now kubelet
  19. #5.所有机器配置master域名
  20. echo "172.31.0.2  master" >> /etc/hosts
复制代码
1.4、修改 kubelet 的 cgroup 和 docker 的 cgroup-driver 保持一致

  1. 为了实现docker使用的cgroupdriver与kubelet使用的cgroup的一致性,建议修改如下文件内容。
  2. # vim /etc/sysconfig/kubelet
  3. KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
  4. #sed -i 's#KUBELET_EXTRA_ARGS=""#KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"#g' /etc/sysconfig/kubelet
  5. 设置kubelet为开机自启动即可,由于没有生成配置文件,集群初始化后自动启动
  6. # systemctl enable kubelet
复制代码
1.5、使用containerd 默认容器的设置

说明:
如果你从软件包(例如,RPM 大概 .deb)中安装 containerd,你大概会发现此中默认克制了 CRI 集成插件。
你必要启用 CRI 支持才气在 Kubernetes 集群中使用 containerd。 要确保 cri 没有出如今 /etc/containerd/config.toml 文件中 disabled_plugins 列表内。如果你更改了这个文件,也请记得要重启 containerd。
如果你在初次安装集群后或安装 CNI 后遇到容器崩溃循环,则随软件包提供的 containerd 设置大概包含不兼容的设置参数。考虑按照 getting-started.md 中指定的 containerd config default > /etc/containerd/config.toml 重置 containerd 设置,然后相应地设置上述设置参数。
  1. #1.使用如下命令重置config.toml文件
  2. containerd config default > /etc/containerd/config.toml
  3. #2.编辑配置文件
  4. vim /etc/containerd/config.toml
  5. # SystemdCgroup = false 改为 SystemdCgroup = true
  6. sed -i 's#SystemdCgroup = false#SystemdCgroup = true#g' /etc/containerd/config.toml
  7. # 3.修改 sandbox_image = "k8s.gcr.io/pause:3.6"
  8. #sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9"
  9. sed -i 's#sandbox_image = "registry.k8s.io/pause:3.6"#sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9"#g' /etc/containerd/config.toml
  10. # 4.设置开机自启动
  11. systemctl enable containerd
  12. # 5.重新启动containerd
  13. systemctl restart containerd
  14. # 6. 列出containerd所有镜像命令
  15. ctr images ls
复制代码
1.6、使用kubeadm举行初始化

  1. # 在master节点上执行
  2. kubeadm init \
  3. --apiserver-advertise-address=172.31.0.2 \
  4. --control-plane-endpoint=master \
  5. --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
  6. --kubernetes-version v1.24.6 \
  7. --service-cidr=10.96.0.0/16 \
  8. --pod-network-cidr=192.168.0.0/16
  9. # 上面参数说明
  10. --apiserver-advertise-address 集群通告地址
  11. --image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
  12. --kubernetes-version K8s版本,与上面安装的一致
  13. --service-cidr 集群内部虚拟网络,Pod统一访问入口
  14. --pod-network-cidr Pod网络,,与下面部署的CNI网络组件yaml中保持一致
复制代码
1.7、初始化成功

  1. Your Kubernetes control-plane has initialized successfully!
  2. To start using your cluster, you need to run the following as a regular user:
  3.   mkdir -p $HOME/.kube
  4.   sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  5.   sudo chown $(id -u):$(id -g) $HOME/.kube/config
  6. Alternatively, if you are the root user, you can run:
  7.   export KUBECONFIG=/etc/kubernetes/admin.conf
  8. You should now deploy a pod network to the cluster.
  9. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  10.   https://kubernetes.io/docs/concepts/cluster-administration/addons/
  11. You can now join any number of control-plane nodes by copying certificate authorities
  12. and service account keys on each node and then running the following as root:
  13.   kubeadm join master:6443 --token bgh00y.71sw9kf1ruk04m6l \
  14.         --discovery-token-ca-cert-hash sha256:4010d64b3c65acc29d0e41064f83126a797f19fbf621c843cf33fed6e0e8a276 \
  15.         --control-plane
  16. Then you can join any number of worker nodes by running the following on each as root:
  17. kubeadm join master:6443 --token bgh00y.71sw9kf1ruk04m6l \
  18.         --discovery-token-ca-cert-hash sha256:4010d64b3c65acc29d0e41064f83126a797f19fbf621c843cf33fed6e0e8a276
  19. [root@master sysconfig]#
复制代码
1.8、集群部署calico网络插件

  1. 网络组件有很多种,只需要部署其中一个即可,推荐Calico。
  2. Calico是一个纯三层的数据中心网络方案,Calico支持广泛的平台,包括Kubernetes、OpenStack等。
  3. Calico 在每一个计算节点利用 Linux Kernel 实现了一个高效的虚拟路由器( vRouter) 来负责数据转发,而每个 vRouter 通过 BGP 协议负责把自己上运行的 workload 的路由信息向整个 Calico 网络内传播。
  4. 此外,Calico 项目还实现了 Kubernetes 网络策略,提供ACL功能。
  5. #1.下载Calico
  6. curl https://docs.tigera.io/archive/v3.25/manifests/calico.yaml -O
  7. # 2.注意此处 CALICO_IPV4POOL_CIDR 的 value 要和 --pod-network-cidr 后面的值一致
  8. vim calico.yaml
  9. # 在calico.yaml文件中,找到此处value 修改和 --pod-network-cidr 后面的值一致
  10. - name: CALICO_IPV4POOL_CIDR
  11.   value: "192.168.0.0/16"
  12. ...
  13. #3.使用命令执行网络插件
  14. kubectl apply -f calico.yaml
  15. sudo tee /etc/docker/daemon.json <<-'EOF'
  16. {
  17.   "registry-mirrors": ["https://wkxfupsi.mirror.aliyuncs.com"],
  18.   "exec-opts": ["native.cgroupdriver=systemd"],
  19.   "log-driver": "json-file",
  20.   "log-opts": {
  21.     "max-size": "100m"
  22.   },
  23.   "storage-driver": "overlay2"
  24. }
  25. EOF
  26. #4.安装时镜像拉取失败,配置镜像加速器
  27. [root@localhost ~]#
  28. s
  29. #5.由于默认的Calico清单文件中所使用的镜像来源于docker.io国外镜像源,上面我们配置了Docker镜像加速,应删除docker.io前缀以使镜像从国内镜像加速站点下载。
  30. [root@master ~]# cat calico.yaml |grep 'image:'
  31.           image: docker.io/calico/cni:v3.25.0
  32.           image: docker.io/calico/cni:v3.25.0
  33.           image: docker.io/calico/node:v3.25.0
  34.           image: docker.io/calico/node:v3.25.0
  35.           image: docker.io/calico/kube-controllers:v3.25.0
  36. [root@master ~]# sed -i 's#docker.io/##g' calico.yaml
  37. [root@master ~]# cat calico.yaml |grep 'image:'
  38.           image: calico/cni:v3.25.0
  39.           image: calico/cni:v3.25.0
  40.           image: calico/node:v3.25.0
  41.           image: calico/node:v3.25.0
  42.           image: calico/kube-controllers:v3.25.0
  43. #6.如果镜像下载失败
  44. 下载网站[https://github.com/projectcalico/calico/releases]
  45. 下载完成后解压,image为docker镜像文件,使用docker load 命令进行镜像还原
复制代码
二、containerd镜像加快

2.1 containerd 镜像加快设置



  • 修改Config.toml文件
  1. #1.修改配置文件
  2. vim /etc/containerd/config.toml
  3. [plugins."io.containerd.grpc.v1.cri".registry]
  4.       config_path = "/etc/containerd/certs.d"  # 镜像地址配置文件
  5.       
  6. #2.使用下面的命令进行替换      
  7. sed -i 's#config_path = ""#config_path = "/etc/containerd/certs.d"#g' /etc/containerd/config.toml
  8.       [plugins."io.containerd.grpc.v1.cri".registry.auths]
  9.       [plugins."io.containerd.grpc.v1.cri".registry.configs]
  10.       [plugins."io.containerd.grpc.v1.cri".registry.headers]
  11.       [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
复制代码


  • 创建相应目录
  1. mkdir /etc/containerd/certs.d/docker.io -pv
复制代码


  • Containerd设置加快
  1. cat > /etc/containerd/certs.d/docker.io/hosts.toml << EOF
  2. server = "https://docker.io"
  3. [host."https://wkxfupsi.mirror.aliyuncs.com"]
  4.   capabilities = ["pull", "resolve"]
  5. [host."https://registry-1.docker.io"]
  6.         capabilities = ["pull", "resolve"]
  7. EOF
复制代码


  • 重启containerd容器
  1. systemctl restart containerd
复制代码


  • 拉去mysql 镜像
  1. ctr i pull docker.io/library/mysql:latest
复制代码
2.2 containerd 常用镜像下令


  • containerd的概述
   名字:ctr (containerd CLI)
  用法:CTR [global options] command [command options] [arguments…]
  描述:CTR是一个不受支持的用于交互的调试和管理客户机使用容器守护历程。由于它不受支持,选项和利用不能包管向后兼容或容器项目从一个版本到另一个版本都是稳定的
  注:如果没有指定默认名称空间的话,则要 (-n 名称空间)
   下令 说明 利用示例
  plugins, plugin 提供关于容器插件的信息 ctr images list
  version 打印客户端和服务器的版本 ctr version
  containers, c, container 管理容器 ctr containers list
  content 管理内容 ctr content list
  events, event 事件表现容器事件 ctr events
  images, image, i 管理镜像 查看: ctr i list
  leases 管理租赁 ctr leases
  namespaces, namespace, ns 管理定名空间 ctr namespaces list
  pprof 为containerd提供golang Pprof输出
  run 运行容器
  snapshots, snapshot 管理快照
  tasks, t, task 管理使命 ctr -n k8s.io tasks list kill -a -s 9 {id}
  install 安装一个新的包
  oci OCI tools
  shim 与shim直接交互
  help, h 资助 打印版本
  


2.3 ctr日常利用示例

利用示例
  1. # 查看镜像
  2. ~]# ctr images list 或  ctr i ls
  3. # 如没有指定名称空间则需指定
  4. ~]# ctr namespaces list  或 ctr ns list
  5. NAME   LABELS
  6. k8s.io
  7. ~]# ctr -n k8s.io images list
  8. # 镜像标记
  9. ~]# ctr -n k8s.io images tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
  10. # 删除镜像
  11. ~]# ctr -n k8s.io images rm k8s.gcr.io/pause:3.2
  12. # 拉取镜像
  13. ~]# ctr -n k8s.io images pull -k k8s.gcr.io/pause:3.2
  14. # 导出镜像
  15. ~]# ctr -n k8s.io images export pause.tar k8s.gcr.io/pause:3.2
  16. # 导入镜像;不支持 build,commit 镜像
  17. ~]# ctr -n k8s.io i import pause.tar
  18. # 运行容器
  19. ~]# ctr -n k8s.io run --null-io --net-host -d –env PASSWORD=$drone_password –mount type=bind,src=/etc,dst=/host-etc,options=rbind:rw –mount type=bind,src=/root/.kube,dst=/root/.kube,options=rbind:rw $image sysreport bash /sysreport/run.sh
  20. –null-io: 将容器内标准输出重定向到/dev/null
  21. –net-host: 主机网络
  22. -d: 当task执行后就进行下一步shell命令,如没有选项,则会等待用户输入,并定向到容器内
  23. # 查看容器
  24. ~]# ctr containers list 或 ctr c ls
  25. # 如没有指定名称空间则需指定
  26. ~]# ctr -n k8s.io c ls
  27. # 先找出容器然后搜索容器名
  28. ~]# ctr -n k8s.io c ls
  29. CONTAINER      IMAGE                     RUNTIME
  30. 06.....86      pause:3.2              io.containerd.runc.v2
  31. # 找出容器名
  32. ~]# ctr -n k8s.io tasks list
  33. # 停止容器
  34. ~]# kill -a -s 9 {id}
复制代码
2.4 containerd 从jar包中导出镜像到指定的名称空间

  1. #!/bin/bash
  2. #
  3. # https://github.com/kubernetes-sigs/metrics-server
  4. # wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
  5. # sed '/args:/a\        - --kubelet-insecure-tls' components.yaml
  6. # download and change yaml
  7. # wget -O- https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml \
  8. #   | sed '/args:/a\        - --kubelet-insecure-tls' - > components.yaml
  9. # use ali registry to speed up
  10. repo=registry.aliyuncs.com/google_containers
  11. name=k8s.gcr.io/metrics-server/metrics-server:v0.6.1
  12. # remove prefix
  13. #src_name=${name#k8s.gcr.io/}
  14. #src_name=${name#metrics-server/}
  15. src_name=metrics-server:v0.6.1
  16. ctr -n=k8s.io image pull $repo/$src_name
  17. # rename to fit k8s
  18. ctr -n=k8s.io image tag $repo/$src_name $name
  19. ctr -n=k8s.io image rm $repo/$src_name
  20. ctr -n=k8s.io image load -i
  21. # add args: - --kubelet-insecure-tls
  22. kubectl apply -f components.yaml
  23. # docker 导出/导入命令
  24. docker save -o xxx.tar $imageList
  25. docker load -i  xxx.tar
  26. # containerd 容器导出/导入命令
  27. ctr -n=k8s.io image export  xxx.tar  $imageList
  28. ctr -n=k8s.io images import  xxx.tar
  29. #containerd 容器从 tar 包中导出镜像命令
  30. ctr -n k8s.io images export calico-cni.tar docker.io/calico/cni:v3.25.0
  31. ctr -n k8s.io images export calico-node.tar docker.io/calico/node:v3.25.0
  32. ctr -n k8s.io images export calico-kube-controllers.tar docker.io/calico/kube-controllers:v3.25.0
  33. # docker 下载指定sha256 版本的镜像
  34. docker.io/calico/cni:v3.20.6@sha256:00e1c39c1d3d9e91e6c0abb37b2f7a436127a8c9f8ec1db76fade7d8099de0e2
复制代码
  1. 14267/TCP, 14268/TCP, 14269/TCP, 14250/TCP
  2. 16686/TCP, 16687/TCP
  3. Limits:
  4.       cpu:     100m
  5.       memory:  128Mi
  6.     Requests:
  7.       cpu:      20m
  8.       memory:   50Mi
  9.     Liveness:   http-get http://:14269/ delay=5s timeout=1s period=15s #success=1 #failure=5
  10.     Readiness:  http-get http://:14269/ delay=1s timeout=1s period=10s #success=1 #failure=3
  11.     Environment:
  12.       SPAN_STORAGE_TYPE:           elasticsearch
  13.       COLLECTOR_ZIPKIN_HOST_PORT:  :9411
  14.     Mounts:
  15.       /etc/jaeger/sampling from jaeger-sampling-configuration-volume (ro)
  16.       /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-gl9cd (ro)
复制代码
2.5 containerd 卸载下令

  1. #一.创建脚本
  2. cat > remove.sh <<EOF
  3. #!/bin/bash
  4. # 删除contained命令及配置
  5. rm -rf /usr/local/bin/
  6. rm -rf /etc/containerd/
  7. # 删除containerd服务
  8. rm -rf /usr/local/lib/systemd/system/containerd.service
  9. # 删除runc
  10. rm -rf /usr/local/sbin/runc
  11. # 删除CNI插件
  12. rm -rf /opt/containerd/
  13. # 删除ctr命令
  14. rm -rf /usr/bin/ctr
  15. EOF
  16. #二.赋权限及执行脚本
  17. chmod +x remove.sh
  18. ./remove.sh
复制代码
三、安装KubeSphere前置情况

3.1 nfs文件系统

3.1.1 安装 nfs-server

  1. # 在每个机器。
  2. yum install -y nfs-utils
  3. # 在master 执行以下命令
  4. echo "/nfs/data/ *(insecure,rw,sync,no_root_squash)" > /etc/exports
  5. # 执行以下命令,启动 nfs 服务;创建共享目录
  6. mkdir -p /nfs/data
  7. # 在master执行
  8. systemctl enable rpcbind
  9. systemctl enable nfs-server
  10. systemctl start rpcbind
  11. systemctl start nfs-server
  12. # 使配置生效
  13. exportfs -r
  14. #检查配置是否生效
  15. exportfs
复制代码
3.1.2 设置nfs-client(选做)

  1. showmount -e 172.31.0.2
  2. mkdir -p /nfs/data
  3. mount -t nfs 172.31.0.2:/nfs/data /nfs/data
复制代码
3.1.3 设置默认存储

默认存储参考官网地点:https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/blob/master/deploy/kustomization.yaml


  • class.yaml
  • rbac.yaml
  • deploymnet.yaml
  1. ## 创建了一个存储类
  2. apiVersion: storage.k8s.io/v1
  3. kind: StorageClass
  4. metadata:
  5.   name: nfs-storage
  6.   annotations:
  7.     storageclass.kubernetes.io/is-default-class: "true"
  8. provisioner: k8s-sigs.io/nfs-subdir-external-provisioner
  9. parameters:
  10.   archiveOnDelete: "true"  ## 删除pv的时候,pv的内容是否要备份
  11. ---
  12. apiVersion: apps/v1
  13. kind: Deployment
  14. metadata:
  15.   name: nfs-client-provisioner
  16.   labels:
  17.     app: nfs-client-provisioner
  18.   # replace with namespace where provisioner is deployed
  19.   namespace: default
  20. spec:
  21.   replicas: 1
  22.   strategy:
  23.     type: Recreate
  24.   selector:
  25.     matchLabels:
  26.       app: nfs-client-provisioner
  27.   template:
  28.     metadata:
  29.       labels:
  30.         app: nfs-client-provisioner
  31.     spec:
  32.       serviceAccountName: nfs-client-provisioner
  33.       containers:
  34.         - name: nfs-client-provisioner
  35.           image: registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/nfs-subdir-external-provisioner:v4.0.2
  36.           # resources:
  37.           #    limits:
  38.           #      cpu: 10m
  39.           #    requests:
  40.           #      cpu: 10m
  41.           volumeMounts:
  42.             - name: nfs-client-root
  43.               mountPath: /persistentvolumes
  44.           env:
  45.             - name: PROVISIONER_NAME
  46.               value: k8s-sigs.io/nfs-subdir-external-provisioner
  47.             - name: NFS_SERVER
  48.               value: 172.31.0.2 ## 指定自己nfs服务器地址
  49.             - name: NFS_PATH  
  50.               value: /nfs/data  ## nfs服务器共享的目录
  51.       volumes:
  52.         - name: nfs-client-root
  53.           nfs:
  54.             server: 172.31.0.2
  55.             path: /nfs/data
  56. ---
  57. apiVersion: v1
  58. kind: ServiceAccount
  59. metadata:
  60.   name: nfs-client-provisioner
  61.   # replace with namespace where provisioner is deployed
  62.   namespace: default
  63. ---
  64. kind: ClusterRole
  65. apiVersion: rbac.authorization.k8s.io/v1
  66. metadata:
  67.   name: nfs-client-provisioner-runner
  68. rules:
  69.   - apiGroups: [""]
  70.     resources: ["nodes"]
  71.     verbs: ["get", "list", "watch"]
  72.   - apiGroups: [""]
  73.     resources: ["persistentvolumes"]
  74.     verbs: ["get", "list", "watch", "create", "delete"]
  75.   - apiGroups: [""]
  76.     resources: ["persistentvolumeclaims"]
  77.     verbs: ["get", "list", "watch", "update"]
  78.   - apiGroups: ["storage.k8s.io"]
  79.     resources: ["storageclasses"]
  80.     verbs: ["get", "list", "watch"]
  81.   - apiGroups: [""]
  82.     resources: ["events"]
  83.     verbs: ["create", "update", "patch"]
  84. ---
  85. kind: ClusterRoleBinding
  86. apiVersion: rbac.authorization.k8s.io/v1
  87. metadata:
  88.   name: run-nfs-client-provisioner
  89. subjects:
  90.   - kind: ServiceAccount
  91.     name: nfs-client-provisioner
  92.     # replace with namespace where provisioner is deployed
  93.     namespace: default
  94. roleRef:
  95.   kind: ClusterRole
  96.   name: nfs-client-provisioner-runner
  97.   apiGroup: rbac.authorization.k8s.io
  98. ---
  99. kind: Role
  100. apiVersion: rbac.authorization.k8s.io/v1
  101. metadata:
  102.   name: leader-locking-nfs-client-provisioner
  103.   # replace with namespace where provisioner is deployed
  104.   namespace: default
  105. rules:
  106.   - apiGroups: [""]
  107.     resources: ["endpoints"]
  108.     verbs: ["get", "list", "watch", "create", "update", "patch"]
  109. ---
  110. kind: RoleBinding
  111. apiVersion: rbac.authorization.k8s.io/v1
  112. metadata:
  113.   name: leader-locking-nfs-client-provisioner
  114.   # replace with namespace where provisioner is deployed
  115.   namespace: default
  116. subjects:
  117.   - kind: ServiceAccount
  118.     name: nfs-client-provisioner
  119.     # replace with namespace where provisioner is deployed
  120.     namespace: default
  121. roleRef:
  122.   kind: Role
  123.   name: leader-locking-nfs-client-provisioner
  124.   apiGroup: rbac.authorization.k8s.io
复制代码
四、Service Account

4.1 简介

​ 本页介绍了Kubernetes中的ServiceAccount对象,提供了有关服务帐户怎样工作、用例、限制、替代方案以及资源链接的信息,以获得更多指导。
4.2 什么是服务帐户?

​ 服务帐户是一种非人类帐户,在Kubernetes中,它在Kubernet集群中提供不同的身份。集群表里的应用步伐吊舱、系统组件和实体可以使用特定ServiceAccount的根据来标识为该ServiceAccount。此身份在各种情况下都很有效,包括对API服务器举行身份验证或实现基于身份的安全策略。
​ 服务帐户作为ServiceAccount对象存在于API服务器中。服务帐户具有以部属性:


  • Namespaced:每个服务帐户都绑定到一个Kubernetes定名空间。每个定名空间在创建时都会获得一个默认的ServiceAccount。
  • 轻量级:服务帐户存在于集群中,并在Kubernetes API中界说。您可以快速创建服务帐户以启用特定使命。
  • 可移植:复杂容器化工作负载的设置包大概包括系统组件的服务帐户界说。服务帐户的轻量级特性和定名空间标识使设置具有可移植性。
服务帐户与用户帐户不同,用户帐户是集群中经过身份验证的人工用户。默认情况下,用户帐户在Kubernetes API服务器中不存在;相反,API服务器将用户身份视为不透明数据。您可以使用多种方法作为用户帐户举行身份验证。一些Kubernetes发行版大概会添加自界说扩展API来表现API服务器中的用户帐户。
DescriptionServiceAccountUser or groupLocationKubernetes API (ServiceAccount object)ExternalAccess controlKubernetes RBAC or other authorization mechanismsKubernetes RBAC or other identity and access management mechanismsIntended useWorkloads, automationPeople 4.3 默认服务帐户

创建集群时,Kubernetes会自动为集群中的每个定名空间创建一个名为default的ServiceAccount对象。默认情况下,除了Kubernetes在启用基于角色的访问控制(RBAC)时授予全部经过身份验证的主体的默认API发现权限外,每个定名空间中的默认服务帐户没有其他权限。如果删除名称空间中的默认ServiceAccount对象,则控制平面会将其更换为新对象。
如果您在一个定名空间中部署了一个Pod,并且没有手动为该Pod分配ServiceAccount,那么Kubernetes会将该定名空间的默认ServiceAccount分配给Pod。
4.4 Kubernetes服务帐户的用例

作为一般准则,您可以在以下情况下使用服务帐户来提供身份:


  • 您的Pods必要与Kubernetes API服务器通信,例如在以下情况下:

    • 提供对机密中存储的敏感信息的只读访问。
    • 授予跨定名空间访问权限,例如允许Pod-in-namespace示例读取、列出和监视kube节点租赁定名空间中的Lease对象。

  • 您的Pods必要与外部服务举行通信。例如,工作负载Pod必要商用云API的身份,而商用提供商允许设置合适的信任关系。
  • 使用imagePullSecret对专用映像注册表举行身份验证。
  • 外部服务必要与Kubernetes API服务器通信。例如,作为CI/CD管道的一部分对集群举行身份验证。
  • 您在集群中使用第三方安全软件,该软件依赖于不同Pod的ServiceAccount标识,将这些Pod分组到不同的上下文中。
4.5 怎样使用服务帐户

要使用Kubernetes服务帐户,请执行以下利用:

  • 使用Kubernetes客户端(如kubectl)或界说对象的清单创建ServiceAccount对象。
  • 使用授权机制(如RBAC)向ServiceAccount对象授予权限。
  • 在Pod创建过程中将ServiceAccount对象分配给Pod。
  • 如果您正在使用来自外部服务的标识,请检索ServiceAccount令牌,然后从该服务使用它。
有关说明,请参阅设置Pods的服务帐户。
4.6 向服务帐户授予权限

您可以使用内置的Kubernetes基于角色的访问控制(RBAC)机制来授予每个服务帐户所需的最低权限。您创建一个授予访问权限的角色,然后将该角色绑定到您的ServiceAccount。RBAC允许您界说一组最小权限,以便服务帐户权限遵循最小权限原则。使用该服务帐户的Pod所获得的权限不会高出正常运行所需的权限。
有关说明,请参阅ServiceAccount权限
4.7 使用ServiceAccount举行跨定名空间访问

您可以使用RBAC来允许一个定名空间中的服务帐户对集群中不同定名空间中的资源执行利用。例如,考虑一个场景,此中您在dev定名空间中有一个服务帐户和Pod,并且您渴望Pod看到Jobs在维护定名空间中运行。您可以创建一个角色对象,该对象授予列出作业对象的权限。然后,在维护定名空间中创建一个RoleBinding对象,将Role绑定到ServiceAccount对象。如今,dev定名空间中的Pods可以使用该服务帐户列出维护定名空间中的Job对象。
4.8 为Pod分配服务帐户

要将ServiceAccount分配给Pod,请在Pod规范中设置spec.serviceAccountName字段。然后,Kubernetes会自动向Pod提供该ServiceAccount的根据。在v1.22及更高版本中,Kubernetes使用TokenRequest API获得一个短期的、自动旋转的令牌,并将该令牌装载为投影卷。
默认情况下,Kubernetes为Pod提供指定ServiceAccount的根据,无论是默认的ServiceAccount还是您指定的自界说ServiceAccount。
为了防止Kubernetes自动注入指定ServiceAccount或默认ServiceAccount的根据,请将Pod规范中的automountServiceAccountToken字段设置为false。
在1.22之前的版本中,Kubernetes为Pod提供了一个恒久的静态令牌作为Secret。
4.9 手动检索ServiceAccount根据

如果必要ServiceAccount的根据才气装入非标准位置,大概必要非API服务器的访问群体的根据,请使用以下方法之一:


  • TokenRequest API(保举):从您本身的应用步伐代码中哀求短期服务帐户令牌。代币自动到期,到期后可以轮换。如果您有一个不知道Kubernetes的遗留应用步伐,您可以在同一个pod中使用sidecar容器来获取这些令牌,并使其可用于应用步伐工作负载。
  • Token Volume Projection (也保举):在Kubernetes v1.20及更高版本中,使用Pod规范告诉kubelet将服务帐户 token 作为投影数目添加到Pod中。预计的 tokens 会自动到期,kubelet会在代币到期前对其举行轮换。
  • Service Account Token Secrets (不保举):您可以在Pods中将服务帐户令牌作为Kubernetes机密挂载。这些 tokens 不会过期,也不会轮换。不建议使用此方法,尤其是在规模上,由于存在与静态、恒久根据相关的风险。在Kubernetes v1.24及更高版本中,LegacyServiceAccountTokenNoAutoGeneration功能门制止Kubernete自动为ServiceAccounts创建这些令牌。LegacyServiceAccountTokenNoAutoGeneration默认启用;换句话说,Kubernetes不会创建这些令
  1. 注:
  2. 对于在Kubernetes集群之外运行的应用程序,您可能会考虑创建一个存储在Secret中的长期ServiceAccount令牌。这允许身份验证,但Kubernetes项目建议您避免这种方法。长期持有的token代表着一种安全风险,因为一旦被披露,token可能会被滥用。相反,考虑使用替代方案。例如,您的外部应用程序可以使用受良好保护的私钥和证书进行身份验证,也可以使用自定义机制(如您自己实现的身份验证webhook)进行身份验证。
  3. 您还可以使用TokenRequest为您的外部应用程序获取短期令牌。
复制代码
4.11 测试使用默认存储

  1. kind: PersistentVolumeClaim
  2. apiVersion: v1
  3. metadata:
  4.   name: nginx-pvc
  5. spec:
  6.   accessModes:
  7.     - ReadWriteMany
  8.   resources:
  9.     requests:
  10.       storage: 200Mi
复制代码
五、metrics-server

怎样去写metrics-server.yaml文件,最好的答案还是去官网找。

汇总得到5.1 的metrics-server.yaml文件
5.1 创建集群指标监控组件

  1. apiVersion: v1
  2. kind: ServiceAccount
  3. metadata:
  4.   labels:
  5.     k8s-app: metrics-server
  6.   name: metrics-server
  7.   namespace: kube-system
  8. ---
  9. apiVersion: rbac.authorization.k8s.io/v1
  10. kind: ClusterRole
  11. metadata:
  12.   labels:
  13.     k8s-app: metrics-server
  14.     rbac.authorization.k8s.io/aggregate-to-admin: "true"
  15.     rbac.authorization.k8s.io/aggregate-to-edit: "true"
  16.     rbac.authorization.k8s.io/aggregate-to-view: "true"
  17.   name: system:aggregated-metrics-reader
  18. rules:
  19. - apiGroups:
  20.   - metrics.k8s.io
  21.   resources:
  22.   - pods
  23.   - nodes
  24.   verbs:
  25.   - get
  26.   - list
  27.   - watch
  28. ---
  29. apiVersion: rbac.authorization.k8s.io/v1
  30. kind: ClusterRole
  31. metadata:
  32.   labels:
  33.     k8s-app: metrics-server
  34.   name: system:metrics-server
  35. rules:
  36. - apiGroups:
  37.   - ""
  38.   resources:
  39.   - pods
  40.   - nodes
  41.   - nodes/stats
  42.   - namespaces
  43.   - configmaps
  44.   verbs:
  45.   - get
  46.   - list
  47.   - watch
  48. ---
  49. apiVersion: rbac.authorization.k8s.io/v1
  50. kind: RoleBinding
  51. metadata:
  52.   labels:
  53.     k8s-app: metrics-server
  54.   name: metrics-server-auth-reader
  55.   namespace: kube-system
  56. roleRef:
  57.   apiGroup: rbac.authorization.k8s.io
  58.   kind: Role
  59.   name: extension-apiserver-authentication-reader
  60. subjects:
  61. - kind: ServiceAccount
  62.   name: metrics-server
  63.   namespace: kube-system
  64. ---
  65. apiVersion: rbac.authorization.k8s.io/v1
  66. kind: ClusterRoleBinding
  67. metadata:
  68.   labels:
  69.     k8s-app: metrics-server
  70.   name: metrics-server:system:auth-delegator
  71. roleRef:
  72.   apiGroup: rbac.authorization.k8s.io
  73.   kind: ClusterRole
  74.   name: system:auth-delegator
  75. subjects:
  76. - kind: ServiceAccount
  77.   name: metrics-server
  78.   namespace: kube-system
  79. ---
  80. apiVersion: rbac.authorization.k8s.io/v1
  81. kind: ClusterRoleBinding
  82. metadata:
  83.   labels:
  84.     k8s-app: metrics-server
  85.   name: system:metrics-server
  86. roleRef:
  87.   apiGroup: rbac.authorization.k8s.io
  88.   kind: ClusterRole
  89.   name: system:metrics-server
  90. subjects:
  91. - kind: ServiceAccount
  92.   name: metrics-server
  93.   namespace: kube-system
  94. ---
  95. apiVersion: v1
  96. kind: Service
  97. metadata:
  98.   labels:
  99.     k8s-app: metrics-server
  100.   name: metrics-server
  101.   namespace: kube-system
  102. spec:
  103.   ports:
  104.   - name: https
  105.     port: 443
  106.     protocol: TCP
  107.     targetPort: https
  108.   selector:
  109.     k8s-app: metrics-server
  110. ---
  111. apiVersion: apps/v1
  112. kind: Deployment
  113. metadata:
  114.   labels:
  115.     k8s-app: metrics-server
  116.   name: metrics-server
  117.   namespace: kube-system
  118. spec:
  119.   selector:
  120.     matchLabels:
  121.       k8s-app: metrics-server
  122.   strategy:
  123.     rollingUpdate:
  124.       maxUnavailable: 0
  125.   template:
  126.     metadata:
  127.       labels:
  128.         k8s-app: metrics-server
  129.     spec:
  130.       containers:
  131.       - args:
  132.         - --cert-dir=/tmp
  133.         - --kubelet-insecure-tls
  134.         - --secure-port=4443
  135.         - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
  136.         - --kubelet-use-node-status-port
  137.         image: registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/metrics-server:v0.4.3
  138.         imagePullPolicy: IfNotPresent
  139.         livenessProbe:
  140.           failureThreshold: 3
  141.           httpGet:
  142.             path: /livez
  143.             port: https
  144.             scheme: HTTPS
  145.           periodSeconds: 10
  146.         name: metrics-server
  147.         ports:
  148.         - containerPort: 4443
  149.           name: https
  150.           protocol: TCP
  151.         readinessProbe:
  152.           failureThreshold: 3
  153.           httpGet:
  154.             path: /readyz
  155.             port: https
  156.             scheme: HTTPS
  157.           periodSeconds: 10
  158.         securityContext:
  159.           readOnlyRootFilesystem: true
  160.           runAsNonRoot: true
  161.           runAsUser: 1000
  162.         volumeMounts:
  163.         - mountPath: /tmp
  164.           name: tmp-dir
  165.       nodeSelector:
  166.         kubernetes.io/os: linux
  167.       priorityClassName: system-cluster-critical
  168.       serviceAccountName: metrics-server
  169.       volumes:
  170.       - emptyDir: {}
  171.         name: tmp-dir
  172. ---
  173. apiVersion: apiregistration.k8s.io/v1
  174. kind: APIService
  175. metadata:
  176.   labels:
  177.     k8s-app: metrics-server
  178.   name: v1beta1.metrics.k8s.io
  179. spec:
  180.   group: metrics.k8s.io
  181.   groupPriorityMinimum: 100
  182.   insecureSkipTLSVerify: true
  183.   service:
  184.     name: metrics-server
  185.     namespace: kube-system
  186.   version: v1beta1
  187.   versionPriority: 100
复制代码
5.2 文本内容更换下令

  1. sed -i 's#calico/node/#docker.io/calico/node/#g' calico.yaml
复制代码
5.3 逼迫删除pod下令

  1. # 强制删除pod命令
  2. # kubectl delete po <your-pod-name> -n <name-space> --force --grace-period=0
  3. kubectl delete po calico-kube-controllers-84c476996d-djgt8 -n kube-system --force --grace-period=0
复制代码
5.4 Deployment yaml 参数详解-1

  1. apiVersion: apps/v1  # 指定api版本,此值必须在kubectl api-versions中  
  2. kind: Deployment  # 指定创建资源的角色/类型   
  3. metadata:  # 资源的元数据/属性
  4.   name: demo  # 资源的名字,在同一个namespace中必须唯一
  5.   namespace: default # 部署在哪个namespace中
  6.   labels:  # 设定资源的标签
  7.     app: demo
  8.     version: stable
  9. spec: # 资源规范字段
  10.   replicas: 1 # 声明副本数目
  11.   revisionHistoryLimit: 3 # 保留历史版本
  12.   selector: # 选择器
  13.     matchLabels: # 匹配标签
  14.       app: demo
  15.       version: stable
  16.   strategy: # 策略
  17.     rollingUpdate: # 滚动更新
  18.       maxSurge: 30% # 最大额外可以存在的副本数,可以为百分比,也可以为整数
  19.       maxUnavailable: 30% # 示在更新过程中能够进入不可用状态的 Pod 的最大值,可以为百分比,也可以为整数
  20.     type: RollingUpdate # 滚动更新策略
  21.   template: # 模版
  22.     metadata: # 资源的元数据/属性
  23.       annotations: # 自定义注解列表
  24.         sidecar.istio.io/inject: "false" # 自定义注解名字
  25.       labels: # 设定资源的标签
  26.         app: demo
  27.         version: stable
  28.     spec: # 资源规范字段
  29.       containers:
  30.       - name: demo # 容器的名字   
  31.         image: demo:v1 # 容器使用的镜像地址   
  32.         imagePullPolicy: IfNotPresent # 每次Pod启动拉取镜像策略,三个选择 Always、Never、IfNotPresent
  33.                                       # Always,每次都检查;Never,每次都不检查(不管本地是否有);IfNotPresent,如果本地有就不检查,如果没有就拉取
  34.         resources: # 资源管理
  35.           limits: # 最大使用
  36.             cpu: 300m # CPU,1核心 = 1000m
  37.             memory: 500Mi # 内存,1G = 1024Mi
  38.           requests:  # 容器运行时,最低资源需求,也就是说最少需要多少资源容器才能正常运行
  39.             cpu: 100m
  40.             memory: 100Mi
  41.         livenessProbe: # pod 内部健康检查的设置
  42.           httpGet: # 通过httpget检查健康,返回200-399之间,则认为容器正常
  43.             path: /healthCheck # URI地址
  44.             port: 8080 # 端口
  45.             scheme: HTTP # 协议
  46.             # host: 127.0.0.1 # 主机地址
  47.           initialDelaySeconds: 30 # 表明第一次检测在容器启动后多长时间后开始
  48.           timeoutSeconds: 5 # 检测的超时时间
  49.           periodSeconds: 30 # 检查间隔时间
  50.           successThreshold: 1 # 成功门槛
  51.           failureThreshold: 5 # 失败门槛,连接失败5次,pod杀掉,重启一个新的pod
  52.         readinessProbe: # Pod 准备服务健康检查设置
  53.           httpGet:
  54.             path: /healthCheck
  55.             port: 8080
  56.             scheme: HTTP
  57.           initialDelaySeconds: 30
  58.           timeoutSeconds: 5
  59.           periodSeconds: 10
  60.           successThreshold: 1
  61.           failureThreshold: 5
  62.         #也可以用这种方法   
  63.         #exec: 执行命令的方法进行监测,如果其退出码不为0,则认为容器正常   
  64.         #  command:   
  65.         #    - cat   
  66.         #    - /tmp/health   
  67.         #也可以用这种方法   
  68.         #tcpSocket: # 通过tcpSocket检查健康  
  69.         #  port: number
  70.         ports:
  71.           - name: http # 名称
  72.             containerPort: 8080 # 容器开发对外的端口
  73.             protocol: TCP # 协议
  74.       imagePullSecrets: # 镜像仓库拉取密钥
  75.         - name: harbor-certification
  76.       affinity: # 亲和性调试
  77.         nodeAffinity: # 节点亲和力
  78.           requiredDuringSchedulingIgnoredDuringExecution: # pod 必须部署到满足条件的节点上
  79.             nodeSelectorTerms: # 节点满足任何一个条件就可以
  80.             - matchExpressions: # 有多个选项,则只有同时满足这些逻辑选项的节点才能运行 pod
  81.               - key: beta.kubernetes.io/arch
  82.                 operator: In
  83.                 values:
  84.                 - amd64
复制代码
5.5 Deployment yaml 参数详解-2

  1. mkdir /opt/demo
  2. vim nginx-demo1.yaml
  3. apiversion: apps/v1    #指定api版本标签】
  4. kind: Deployment      
  5. #定义资源的类型/角色】,deployment为副本控制器,此处资源类型可以是Deployment、Job、Ingress、Service等
  6. metadata :          #定义资源的元数据信息,比如资源的名称、namespace、标签等信息
  7.   name: nginx-demo1 #定义资源的名称,在同一个namespace空间中必须是唯一的
  8.   labels:    #定义资源标签(Pod的标签)
  9.     app: nginx
  10. spec:  #定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性
  11.   replicas: 3       #定义副本数量
  12.   selector:         #定义标签选择器
  13.     matchLabels :   #定义匹配标签
  14.       app: nginx    #匹配上面的标签,需与上面的标签定义的app保持一致
  15.   template:         #【定义业务模板】,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配
  16.     metadata:
  17.       labels:
  18.         app: nginx
  19.     spec:
  20.       containers:       #定义容器属性
  21.         - name: nginx   #定义一个容器名,一个- name:定义一个容器
  22.         image: nginx:1.15.4   #定义容器使用的镜像以及版本
  23.         imagePullPolicy: IfNotPresent #镜像拉取策略
  24.         ports:
  25.         - containerPort: 80   #定义容器的对外的端口
复制代码
5.6例子:deployment.yaml 文件详解-3

  1. deployment.yaml文件详解
  2. apiVersion: extensions/v1beta1   #接口版本
  3. kind: Deployment                 #接口类型
  4. metadata:
  5.   name: cango-demo               #Deployment名称
  6.   namespace: cango-prd           #命名空间
  7.   labels:
  8.     app: cango-demo              #标签
  9. spec:
  10.   replicas: 3
  11.   strategy:
  12.     rollingUpdate:  ##由于replicas为3,则整个升级,pod个数在2-4个之间
  13.       maxSurge: 1      #滚动升级时会先启动1个pod
  14.       maxUnavailable: 1 #滚动升级时允许的最大Unavailable的pod个数
  15.   template:         
  16.     metadata:
  17.       labels:
  18.         app: cango-demo  #模板名称必填
  19.     sepc: #定义容器模板,该模板可以包含多个容器
  20.       containers:                                                                  
  21.         - name: cango-demo                                                           #镜像名称
  22.           image: swr.cn-east-2.myhuaweicloud.com/cango-prd/cango-demo:0.0.1-SNAPSHOT #镜像地址
  23.           command: [ "/bin/sh","-c","cat /etc/config/path/to/special-key" ]    #启动命令
  24.           args:                                                                #启动参数
  25.             - '-storage.local.retention=$(STORAGE_RETENTION)'
  26.             - '-storage.local.memory-chunks=$(STORAGE_MEMORY_CHUNKS)'
  27.             - '-config.file=/etc/prometheus/prometheus.yml'
  28.             - '-alertmanager.url=http://alertmanager:9093/alertmanager'
  29.             - '-web.external-url=$(EXTERNAL_URL)'
  30.     #如果command和args均没有写,那么用Docker默认的配置。
  31.     #如果command写了,但args没有写,那么Docker默认的配置会被忽略而且仅仅执行.yaml文件的command(不带任何参数的)。
  32.     #如果command没写,但args写了,那么Docker默认配置的ENTRYPOINT的命令行会被执行,但是调用的参数是.yaml中的args。
  33.     #如果如果command和args都写了,那么Docker默认的配置被忽略,使用.yaml的配置。
  34.           imagePullPolicy: IfNotPresent  #如果不存在则拉取
  35.           livenessProbe:       #表示container是否处于live状态。如果LivenessProbe失败,LivenessProbe将会通知kubelet对应的container不健康了。随后kubelet将kill掉container,并根据RestarPolicy进行进一步的操作。默认情况下LivenessProbe在第一次检测之前初始化值为Success,如果container没有提供LivenessProbe,则也认为是Success;
  36.             httpGet:
  37.               path: /health #如果没有心跳检测接口就为/
  38.               port: 8080
  39.               scheme: HTTP
  40.             initialDelaySeconds: 60 ##启动后延时多久开始运行检测
  41.             timeoutSeconds: 5
  42.             successThreshold: 1
  43.             failureThreshold: 5
  44.           readinessProbe:
  45.             httpGet:
  46.               path: /health #如果没有心跳检测接口就为/
  47.               port: 8080
  48.               scheme: HTTP
  49.             initialDelaySeconds: 30 ##启动后延时多久开始运行检测
  50.             timeoutSeconds: 5
  51.             successThreshold: 1
  52.             failureThreshold: 5
  53.           resources:              ##CPU内存限制
  54.             requests:
  55.               cpu: 2
  56.               memory: 2048Mi
  57.             limits:
  58.               cpu: 2
  59.               memory: 2048Mi
  60.           env:                    ##通过环境变量的方式,直接传递pod=自定义Linux OS环境变量
  61.             - name: LOCAL_KEY     #本地Key
  62.               value: value
  63.             - name: CONFIG_MAP_KEY  #局策略可使用configMap的配置Key,
  64.               valueFrom:
  65.                 configMapKeyRef:
  66.                   name: special-config   #configmap中找到name为special-config
  67.                   key: special.type      #找到name为special-config里data下的key
  68.           ports:
  69.             - name: http
  70.               containerPort: 8080 #对service暴露端口
  71.           volumeMounts:     #挂载volumes中定义的磁盘
  72.           - name: log-cache
  73.             mount: /tmp/log
  74.           - name: sdb       #普通用法,该卷跟随容器销毁,挂载一个目录
  75.             mountPath: /data/media   
  76.           - name: nfs-client-root    #直接挂载硬盘方法,如挂载下面的nfs目录到/mnt/nfs
  77.             mountPath: /mnt/nfs
  78.           - name: example-volume-config  #高级用法第1种,将ConfigMap的log-script,backup-script分别挂载到/etc/config目录下的一个相对路径path/to/...下,如果存在同名文件,直接覆盖。
  79.             mountPath: /etc/config      
  80.           - name: rbd-pvc                #高级用法第2中,挂载PVC(PresistentVolumeClaim)
  81. #使用volume将ConfigMap作为文件或目录直接挂载,其中每一个key-value键值对都会生成一个文件,key为文件名,value为内容,
  82.   volumes:  # 定义磁盘给上面volumeMounts挂载
  83.   - name: log-cache
  84.     emptyDir: {}
  85.   - name: sdb  #挂载宿主机上面的目录
  86.     hostPath:
  87.       path: /any/path/it/will/be/replaced
  88.   - name: example-volume-config  # 供ConfigMap文件内容到指定路径使用
  89.     configMap:
  90.       name: example-volume-config  #ConfigMap中名称
  91.       items:
  92.       - key: log-script           #ConfigMap中的Key
  93.         path: path/to/log-script  #指定目录下的一个相对路径path/to/log-script
  94.       - key: backup-script        #ConfigMap中的Key
  95.         path: path/to/backup-script  #指定目录下的一个相对路径path/to/backup-script
  96.   - name: nfs-client-root         #供挂载NFS存储类型
  97.     nfs:
  98.       server: 10.42.0.55          #NFS服务器地址
  99.       path: /opt/public           #showmount -e 看一下路径
  100.   - name: rbd-pvc                 #挂载PVC磁盘
  101.     persistentVolumeClaim:
  102.       claimName: rbd-pvc1         #挂载已经申请的pvc磁盘
复制代码
5.7 例子:Pod yaml 文件详解

  1. //Pod yaml文件详解
  2. apiVersion: v1                        #必选,版本号,例如v1
  3. kind: Pod                                #必选,Pod
  4. metadata:                                #必选,元数据
  5.   name: string                          #必选,Pod名称
  6.   namespace: string                  #必选,Pod所属的命名空间
  7.   labels:                                  #自定义标签
  8.     - name: string                    #自定义标签名字
  9.   annotations:                            #自定义注释列表
  10.     - name: string
  11. spec:                                        #必选,Pod中容器的详细定义
  12.   containers:                          #必选,Pod中容器列表
  13.   - name: string                    #必选,容器名称
  14.     image: string                    #必选,容器的镜像名称
  15.     imagePullPolicy: [Always | Never | IfNotPresent]        #获取镜像的策略:Alawys表示总是下载镜像,IfnotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像
  16.     command: [string]                #容器的启动命令列表,如不指定,使用打包时使用的启动命令
  17.     args: [string]                        #容器的启动命令参数列表
  18.     workingDir: string                #容器的工作目录
  19.     volumeMounts:                        #挂载到容器内部的存储卷配置
  20.     - name: string                          #引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名
  21.       mountPath: string                  #存储卷在容器内mount的绝对路径,应少于512字符
  22.       readOnly: boolean                  #是否为只读模式
  23.     ports:                                        #需要暴露的端口库号列表
  24.     - name: string                          #端口号名称
  25.       containerPort: int          #容器需要监听的端口号
  26.       hostPort: int                          #容器所在主机需要监听的端口号,默认与Container相同
  27.       protocol: string                  #端口协议,支持TCP和UDP,默认TCP
  28.     env:                                        #容器运行前需设置的环境变量列表
  29.     - name: string                          #环境变量名称
  30.       value: string                          #环境变量的值
  31.     resources:                                #资源限制和请求的设置
  32.       limits:                                  #资源限制的设置
  33.         cpu: string                            #Cpu的限制,单位为core数,将用于docker run --cpu-shares参数
  34.         memory: string                        #内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
  35.       requests:                                  #资源请求的设置
  36.         cpu: string                            #Cpu请求,容器启动的初始可用数量
  37.         memory: string                    #内存清楚,容器启动的初始可用数量
  38.     livenessProbe:                     #对Pod内个容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种方法即可
  39.       exec:                                        #对Pod容器内检查方式设置为exec方式
  40.         command: [string]          #exec方式需要制定的命令或脚本
  41.       httpGet:                                #对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、port
  42.         path: string
  43.         port: number
  44.         host: string
  45.         scheme: string
  46.         HttpHeaders:
  47.         - name: string
  48.           value: string
  49.       tcpSocket:                        #对Pod内个容器健康检查方式设置为tcpSocket方式
  50.          port: number
  51.        initialDelaySeconds: 0        #容器启动完成后首次探测的时间,单位为秒
  52.        timeoutSeconds: 0                #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒
  53.        periodSeconds: 0                        #对容器监控检查的定期探测时间设置,单位秒,默认10秒一次
  54.        successThreshold: 0
  55.        failureThreshold: 0
  56.        securityContext:
  57.          privileged:false
  58.     restartPolicy: [Always | Never | OnFailure]                #Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该Pod
  59.     nodeSelector: obeject                #设置NodeSelector表示将该Pod调度到包含这个label的node上,以key:value的格式指定
  60.     imagePullSecrets:                        #Pull镜像时使用的secret名称,以key:secretkey格式指定
  61.     - name: string
  62.     hostNetwork:false                        #是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
  63.     volumes:                                        #在该pod上定义共享存储卷列表
  64.     - name: string                                  #共享存储卷名称 (volumes类型有很多种)
  65.       emptyDir: {}                                  #类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值
  66.       hostPath: string                          #类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录
  67.         path: string                            #Pod所在宿主机的目录,将被用于同期中mount的目录
  68.       secret:                                        #类型为secret的存储卷,挂载集群与定义的secre对象到容器内部
  69.         scretname: string  
  70.         items:     
  71.         - key: string
  72.           path: string
  73.       configMap:                                #类型为configMap的存储卷,挂载预定义的configMap对象到容器内部
  74.         name: string
  75.         items:
  76.         - key: string
复制代码
5.8 例子:Service yaml 文件详解

  1. Service yaml文件详解
  2. apiVersion: v1
  3. kind: Service
  4. matadata:                                #元数据
  5.   name: string                           #service的名称
  6.   namespace: string                      #命名空间  
  7.   labels:                                #自定义标签属性列表
  8.     - name: string
  9.   annotations:                           #自定义注解属性列表  
  10.     - name: string
  11. spec:                                    #详细描述
  12.   selector: []                           #label selector配置,将选择具有label标签的Pod作为管理
  13.                                          #范围
  14.   type: string                           #service的类型,指定service的访问方式,默认为
  15.                                          #clusterIp
  16.   clusterIP: string                      #虚拟服务地址      
  17.   sessionAffinity: string                #是否支持session
  18.   ports:                                 #service需要暴露的端口列表
  19.   - name: string                         #端口名称
  20.     protocol: string                     #端口协议,支持TCP和UDP,默认TCP
  21.     port: int                            #服务监听的端口号
  22.     targetPort: int                      #需要转发到后端Pod的端口号
  23.     nodePort: int                        #当type = NodePort时,指定映射到物理机的端口号
  24.   status:                                #当spce.type=LoadBalancer时,设置外部负载均衡器的地址
  25.     loadBalancer:                        #外部负载均衡器   
  26.       ingress:                           #外部负载均衡器
  27.         ip: string                       #外部负载均衡器的Ip地址值
  28.         hostname: string                 #外部负载均衡器的主机名
复制代码
六、部署 KubeSphere

6.1 下载焦点文件

  1. # 下载 kubesphere 文件
  2. wget https://github.com/kubesphere/ks-installer/releases/download/v3.3.2/kubesphere-installer.yaml
  3. wget https://github.com/kubesphere/ks-installer/releases/download/v3.3.2/cluster-configuration.yaml
复制代码
6.2 修改cluster-configuration.yaml 中参数

   在 cluster-configuration.yaml中指定我们必要开启的功能
  参照官网“启用可插拔组件”
  https://kubesphere.io/zh/docs/v3.3/pluggable-components/
  6.3 执行安装

  1. kubectl apply -f kubesphere-installer.yaml
  2. kubectl apply -f cluster-configuration.yaml
复制代码
6.4 查看执行进度

  1. kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f
复制代码
6.5 暗码

  1. Console: http://172.31.0.2:30880
  2. Account: admin
  3. Password: #Yooo85100736
  4. NOTES:
  5.   1. After you log into the console, please check the
  6.      monitoring status of service components in
  7.      "Cluster Management". If any service is not
  8.      ready, please wait patiently until all components
  9.      are up and running.
  10.   2. Please change the default password after login.
  11. #####################################################
  12. https://kubesphere.io             2023-05-06 16:43:16
  13. ####################################################
复制代码
6.6 k8s 查看log日志信息下令

  1. #1.查看指定名称空间的pod详细信息
  2. kubectl get pods -n ${命名空间名} -o wide
  3. 例:kubectl get pods -n kube-system -o wide
  4. #2.查看指定名称空间的服务执行的日志
  5. kubectl log -f ${podID} -n ${命名空间名}
  6. 例:kubectl logs -f xxx-podId-xxx -n kube-system
  7. # 将k8s上的日志下载到本地。
  8. kubectl get pods -n ${命名空间名} -o wide
  9. # kubectl logs ${podID} -n ${命名空间名} > log.txt
复制代码
  1. spring:
  2.   main:
  3.     allow-bean-definition-overriding: true
  4.   autoconfigure:
  5.     exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
  6. #请求处理的超时时间
  7. ribbon:
  8.   ReadTimeout: 10000
  9.   ConnectTimeout: 10000
  10. # feign 配置
  11. feign:
  12.   sentinel:
  13.     enabled: true
  14.   okhttp:
  15.     enabled: true
  16.   httpclient:
  17.     enabled: false
  18.   client:
  19.     config:
  20.       default:
  21.         connectTimeout: 10000
  22.         readTimeout: 10000
  23.   compression:
  24.     request:
  25.       enabled: true
  26.     response:
  27.       enabled: true
  28. # 暴露监控端点
  29. management:
  30.   endpoints:
  31.     web:
  32.       exposure:
  33.         include: '*'
复制代码
encrypted_data_key LONG VARCHAR DEFAULT NULL,
  1. docker tag 1916ac3a9846 registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-visual:v1
  2. docker tag 05932522cba1 registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-system:v1
  3. docker tag 3c4fcae27531 registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-job:v1
  4. docker tag 0fdb86e50e96 registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-gateway:v1
  5. docker tag 90f24fc1e88a registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-file:v1
  6. docker tag 0da34a8fdd98 registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-auth:v1
  7. docker push registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-visual:v2
  8. docker push registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-system:v2
  9. docker push registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-job:v2
  10. docker push registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-gateway:v2
  11. docker push registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-file:v2
  12. docker push registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-auth:v2
  13. docker push registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-ui:v2
  14. docker build -t registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-visual:v2 -f Dockerfile .
  15. docker build -t registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-system:v2 -f Dockerfile .
  16. docker build -t registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-job:v2 -f Dockerfile .
  17. docker build -t registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-gateway:v2 -f Dockerfile .
  18. docker build -t registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-file:v2 -f Dockerfile .
  19. docker build -t registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-auth:v2 -f Dockerfile .
  20. docker build -t registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-ui:v2 -f dockerfile .
  21. docker pull registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-visual:v1
  22. docker pull registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-system:v1
  23. docker pull registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-job:v1
  24. docker pull registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-gateway:v1
  25. docker pull registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-file:v1
  26. docker pull registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-auth:v1
  27. ctr -n k8s.io images rm registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-visual:v2
  28. ctr -n k8s.io images rm registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-system:v2
  29. ctr -n k8s.io images rm registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-job:v2
  30. ctr -n k8s.io images rm registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-file:v2
  31. ctr -n k8s.io images rm registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-gateway:v2
  32. ctr -n k8s.io images rm registry.cn-hangzhou.aliyuncs.com/yooome/ruoyi-auth:v2
复制代码
七、商易通:

7.1 中间件

中间件集群本地点外部访问地点Nacoshis-nacos.his:8848http://139.198.117.77:31644/nacosMySQLhis-mysql.his:3306139.198.117.77:30974Redishis-redis.his:6379139.198.117.77:31099Sentinelhis-sentinel.his:8080http://139.198.117.77:30011/MongoDBmongodb.his:27017139.198.117.77:30869RabbitMQrabbitm-e0q9dy-rabbitmq.his:5672139.198.117.77:31289ElasticSearchhis-es.his:9200139.198.117.77:31300
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

泉缘泉

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表