k8s:kubesphere部署

k8s:安装kubesphere

官方安装地址:https://kubesphere.io/zh/docs/v3.4/quick-start/minimal-kubesphere-on-k8s/

1、首先需要镜像

注意:下载所有节点所需的镜像
  

kubesphere/ks-installer:v3.3.2


mirrorgooglecontainers/defaultbackend-amd64:1.4
kubesphere/kube-rbac-proxy:v0.11.0
kubesphere/prometheus-operator:v0.55.1
kubesphere/kube-state-metrics:v2.6.0
prom/node-exporter:v1.3.1
kubesphere/notification-manager-operator:v2.3.0
kubesphere/kubectl:v1.22.0
kubesphere/ks-console:v3.4.1 
kubesphere/ks-apiserver:v3.4.1 
kubesphere/ks-controller-manager:v3.4.1 
kubesphere/notification-tenant-sidecar:v3.2.0 
prom/alertmanager:v0.23.0 
kubesphere/prometheus-config-reloader:v0.55.1
prom/prometheus:v2.39.1




IfNotPresent
#后续编辑deployment、镜像默认拉取策略修改为IfNotPresent

2、创建一个nfs存储类
2.1:先在一个节点创建NFS服务、整一个挂载目录
(浏览器————> kubesphere————>存储类——>NFS)

NFS地址:10.0.0.80

#apt  isntall  nfs-server
#mkdir  /data/volumes   -p
#vim /etc/exports
    
     /data/volumes   *(rw,no_root_squash)
#exportfs   -av    ###重新加载NFS

2.2:创建存储类

服务账户的yaml文件
####################################################################
### 1、创建一个role认证
### 2、创建存储类 
###   2.1、存储类中定义删除PV的权限规则(1、删除PV时删除NFS中的数据。2、保留NFS中的数据)
###   2.2、创建NFS驱动(指定后端存储NFS(指定驱动、对应驱动的文件))
### 3、创建一个PV(PV创建时候、存储类驱动会自动创建PV、也就是挂载(外部底层存储)NFS。无需手动创建PV)
### 4、删除时候顺序(pod、PVC、PV、再删除存储类)
### 5
####################################################################
###   /data/ServiceAccount/
####################################################################
apiVersion: v1
kind: Namespace
metadata:
  name: jigaobo-ns
####################################################################
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: jigaobo
  # replace with namespace where provisioner is deployed
  namespace: jigaobo-ns
####################################################################
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: jigaobo-ClusterRole
rules:
  - apiGroups: [""]
    resources: ["nodes"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["persistentvolumes"]
    verbs: ["get", "list", "watch", "create", "delete"]
  - apiGroups: [""]
    resources: ["persistentvolumeclaims"]
    verbs: ["get", "list", "watch", "update"]
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["create", "update", "patch"]
  - apiGroups: [""]
    resources: ["pods", "services"]
    verbs: ["get", "list", "watch","create","delete"]
####################################################################
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: jigaobo-ClusterRole-Binding
subjects:
  - kind: ServiceAccount
    name: jigaobo
    # replace with namespace where provisioner is deployed
    namespace: jigaobo-ns
roleRef:
  kind: ClusterRole
  name: jigaobo-ClusterRole
  apiGroup: rbac.authorization.k8s.io
####################################################################
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: jigaobo-role
  # replace with namespace where provisioner is deployed
  namespace: jigaobo-ns
rules:
  - apiGroups: [""]
    resources: ["endpoints"]
    verbs: ["get", "list", "watch", "create", "update", "patch"]
---
####################################################################
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: jigaobo-role
  # replace with namespace where provisioner is deployed
  namespace: jigaobo-ns
subjects:
  - kind: ServiceAccount
    name: jigaobo
    # replace with namespace where provisioner is deployed
    namespace: jigaobo-ns
roleRef:
  kind: Role
  name: jigaobo-role
  apiGroup: rbac.authorization.k8s.io
####################################################################
---
apiVersion: v1
kind: Secret
type: kubernetes.io/service-account-token
metadata:
  name: jigaobo-user-token
  namespace: jigaobo-ns
  annotations:
    kubernetes.io/service-account.name: "jigaobo"

创建存储类的yaml文件
####################################################################
### 1、创建一个role认证
### 2、创建存储类 
###   2.1、存储类中定义删除PV的权限规则(1、删除PV时删除NFS中的数据。2、保留NFS中的数据)
###   2.2、创建NFS驱动(指定后端存储NFS(指定驱动、对应驱动的文件))
### 3、创建一个PV(PV创建时候、存储类驱动会自动创建PV、也就是挂载(外部底层存储)NFS。无需手动创建PV)
### 4、删除时候顺序(pod、PVC、PV、再删除存储类)
####################################################################

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: managed-nfs-storage
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner # or choose another name, must match deployment's env PROVISIONER_NAME'
reclaimPolicy: Retain #PV的删除策略,默认为delete,删除PV后立即删除NFS server的数据
mountOptions:
  #- vers=4.1 #containerd有部分参数异常
  #- noresvport #告知NFS客户端在重新建立网络连接时,使用新的传输控制协议源端口
  - noatime #访问文件时不更新文件inode中的时间戳,高并发环境可提高性能
parameters:
  #mountOptions: "vers=4.1,noresvport,noatime"
  archiveOnDelete: "true"  #删除pod时保留pod数据,默认为false时为不保留数据
外部驱动、调用外部NFS的yanl文件
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nfs-client-provisioner
  labels:
    app: nfs-client-provisioner
  # replace with namespace where provisioner is deployed
  namespace: nfs
spec:
  replicas: 1
  strategy: #部署策略
    type: Recreate
  selector:
    matchLabels:
      app: nfs-client-provisioner
  template:
    metadata:
      labels:
        app: nfs-client-provisioner
    spec:
      serviceAccountName: nfs-client-provisioner
      containers:
        - name: nfs-client-provisioner
          #image: k8s.gcr.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2
          image: registry.cn-qingdao.aliyuncs.com/zhangshijie/nfs-subdir-external-provisioner:v4.0.2
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: k8s-sigs.io/nfs-subdir-external-provisioner
            - name: NFS_SERVER
              value: 10.0.0.80
            - name: NFS_PATH
              value: /data/volumes
      volumes:
        - name: nfs-client-root
          nfs:
            server: 10.0.0.80
            path: /data/volumes

3、启动
下载yaml文件

1、先apply这个文件(可以修改镜像为registry.cn-hangzhou.aliyuncs.com/docker-jigaobo/ks-installer:v3.4.1)
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.4.1/kubesphere-installer.yaml



2、再apply这个文件(可能要稍等一会儿、初始化有点慢、这个需要大量的镜像、等资源启动后修改镜像拉取策略为IfNotPresent)
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.4.1/cluster-configuration.yaml

3、修改镜像的拉取策略、拉取镜像异常的pod
kubectl edit deployment ks-apiserver -n kubesphere-system
kubectl edit deployment ks-console -n kubesphere-system 
kubectl edit deployment ks-controller-manager  -n kubesphere-system 

4、验证及web页面登录

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

2、查看svc端口
kubectl get svc/ks-console -n kubesphere-system

3、登录 Web 控制台
确保在安全组中打开了端口30880,并通过 NodePort (IP:30880) 使用默认帐户和密码 (admin/P@88w0rd) 访问 Web 控制台。

删除kubesphere

删除kubesphere、官方推荐方式

#执行脚本删除
/root/dashboard/kubesphere/2.kubernetes-day2-20230416/20230416-cases/4.KubeSphere/delete.sh

#然后删除pvc和pv
kubectl get pv | awk '{print $1}'
kubectl delete pv PV-NAME


#一条命令搞定
kubectl delete pv $(kubectl get pv | awk '{print $1}')

如果上面脚本执行卡顿、配合命令直接强制删除

#慎用!!!!( 强制删除一个名称空间下的所有资源 )
kubectl delete all --all -n kubesphere-monitoring-system --force --grace-period=0
posted @ 2024-12-11 17:53  姬高波  阅读(142)  评论(0)    收藏  举报