k8s部署gitlab最新版并初始化和登录
  ZLGFQDxSRQTs 2023年11月13日 28 0

一、准备工作:默认完成kubernetest、nfs部署

1、部署NFS和K8s(部署过程在之前文档有记录)

创建nfs共享目录

在nfs服务器创建共享目录,部署的gitlib使用共享目录来进行持久化,这样不管在哪个节点运行gitlib都没有关系。

mkdir -p /data/k8s-nfs/gitlab/config
mkdir -p /data/k8s-nfs/gitlab/logs
mkdir -p /data/k8s-nfs/gitlab/data
添加到共享
/data/k8s_nfs 10.10.90.0/24(insecure,rw,async,no_root_squash)
执行更新
exportfs -r
客户端挂载
mount -t nfs 10.10.90.67:/data/k8s_nfs/ /data/k8s_nfs/


二、部署gitlib

1、 准备部署文件(gitlab-deploy.yaml)

apiVersion: v1
kind: Service
metadata:
  name: gitlab
spec:
  type: NodePort
  ports:
  # Port上的映射端口
  - port: 443
    targetPort: 443
    name: gitlab443
  - port: 80
    targetPort: 80
    name: gitlab80
  - port: 22
    targetPort: 22
    name: gitlab22
  selector:
    app: gitlab
 
---
 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: gitlab
spec:
  selector:
    matchLabels:
      app: gitlab
  revisionHistoryLimit: 2
  template:
    metadata:
      labels:
        app: gitlab
    spec:
      containers:
      # 应用的镜像
      - image: gitlab/gitlab-ce 
        name: gitlab
        imagePullPolicy: IfNotPresent
        # 应用的内部端口
        ports:
        - containerPort: 443
          name: gitlab443
        - containerPort: 80
          name: gitlab80
        - containerPort: 22
          name: gitlab22
        volumeMounts:
        # gitlab持久化
        - name: gitlab-persistent-config
          mountPath: /etc/gitlab
        - name: gitlab-persistent-logs
          mountPath: /var/log/gitlab
        - name: gitlab-persistent-data
          mountPath: /var/opt/gitlab
      imagePullSecrets:
      - name: devops-repo
      volumes:
      # 使用nfs互联网存储
      - name: gitlab-persistent-config
        nfs:
          server: 10.10.90.67
          path: /data/k8s_nfs
      - name: gitlab-persistent-logs
        nfs:
          server: 10.10.90.67
          path: /data/k8s_nfs/gitlab/logs
      - name: gitlab-persistent-data
        nfs:
          server: 10.10.90.67
          path: /data/k8s_nfs/gitlab/data

2、 执行部署

kubectl apply -f gitlib-deploy.yaml

3、查看部署结果

k8s部署gitlab最新版并初始化和登录_CICD

4、 访问登录页面

kubectl get svc -o wide
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                                   AGE     SELECTOR
gitlab       NodePort    10.100.97.244   <none>        443:30758/TCP,80:30351/TCP,22:32211/TCP   3h29m   app=gitlab
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP

可以看到映射80端口的节点端口为:30351

k8s部署gitlab最新版并初始化和登录_gitlab_02

5、登录

初始用户名和密码:

默认用户:root
#初始密码
#通过kubectl describe查看服务所在node
docker exec -it 43b30c04a1bc /bin/bash
cat /etc/gitlab/initial_root_password
#这个文件将在首次执行reconfigure后24小时自动删除

k8s部署gitlab最新版并初始化和登录_CICD_03


三、经验积累

1、当k8s无网络插件时会有如下表现

k8s部署gitlab最新版并初始化和登录_git_04

解决方法:

在master节点安装网络插件-flannel

vim kube-flannel.yml
---
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: psp.flannel.unprivileged
  annotations:
    seccomp.security.alpha.kubernetes.io/allowedProfileNames: docker/default
    seccomp.security.alpha.kubernetes.io/defaultProfileName: docker/default
    apparmor.security.beta.kubernetes.io/allowedProfileNames: runtime/default
    apparmor.security.beta.kubernetes.io/defaultProfileName: runtime/default
spec:
  privileged: false
  volumes:
  - configMap
  - secret
  - emptyDir
  - hostPath
  allowedHostPaths:
  - pathPrefix: "/etc/cni/net.d"
  - pathPrefix: "/etc/kube-flannel"
  - pathPrefix: "/run/flannel"
  readOnlyRootFilesystem: false
  runAsUser:
    rule: RunAsAny
  supplementalGroups:
    rule: RunAsAny
  fsGroup:
    rule: RunAsAny
  allowPrivilegeEscalation: false
  defaultAllowPrivilegeEscalation: false
  allowedCapabilities: ['NET_ADMIN', 'NET_RAW']
  defaultAddCapabilities: []
  requiredDropCapabilities: []
  hostPID: false
  hostIPC: false
  hostNetwork: true
  hostPorts:
  - min: 0
    max: 65535
  seLinux:
    rule: 'RunAsAny'
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: flannel
rules:
- apiGroups: ['extensions']
  resources: ['podsecuritypolicies']
  verbs: ['use']
  resourceNames: ['psp.flannel.unprivileged']
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
- apiGroups:
  - ""
  resources:
  - nodes
  verbs:
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - nodes/status
  verbs:
  - patch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: flannel
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: flannel
subjects:
- kind: ServiceAccount
  name: flannel
  namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: flannel
  namespace: kube-system
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: kube-flannel-cfg
  namespace: kube-system
  labels:
    tier: node
    app: flannel
data:
  cni-conf.json: |
    {
      "name": "cbr0",
      "cniVersion": "0.3.1",
      "plugins": [
        {
          "type": "flannel",
          "delegate": {
            "hairpinMode": true,
            "isDefaultGateway": true
          }
        },
        {
          "type": "portmap",
          "capabilities": {
            "portMappings": true
          }
        }
      ]
    }
  net-conf.json: |
    {
      "Network": "10.244.0.0/16",
      "Backend": {
        "Type": "vxlan"
      }
    }
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: kube-flannel-ds
  namespace: kube-system
  labels:
    tier: node
    app: flannel
spec:
  selector:
    matchLabels:
      app: flannel
  template:
    metadata:
      labels:
        tier: node
        app: flannel
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: kubernetes.io/os
                operator: In
                values:
                - linux
      hostNetwork: true
      priorityClassName: system-node-critical
      tolerations:
      - operator: Exists
        effect: NoSchedule
      serviceAccountName: flannel
      initContainers:
      - name: install-cni-plugin
        image: rancher/mirrored-flannelcni-flannel-cni-plugin:v1.1.0
        command:
        - cp
        args:
        - -f
        - /flannel
        - /opt/cni/bin/flannel
        volumeMounts:
        - name: cni-plugin
          mountPath: /opt/cni/bin
      - name: install-cni
        image: rancher/mirrored-flannelcni-flannel:v0.18.1
        command:
        - cp
        args:
        - -f
        - /etc/kube-flannel/cni-conf.json
        - /etc/cni/net.d/10-flannel.conflist
        volumeMounts:
        - name: cni
          mountPath: /etc/cni/net.d
        - name: flannel-cfg
          mountPath: /etc/kube-flannel/
      containers:
      - name: kube-flannel
        image: rancher/mirrored-flannelcni-flannel:v0.18.1
        command:
        - /opt/bin/flanneld
        args:
        - --ip-masq
        - --kube-subnet-mgr
        resources:
          requests:
            cpu: "100m"
            memory: "50Mi"
          limits:
            cpu: "100m"
            memory: "50Mi"
        securityContext:
          privileged: false
          capabilities:
            add: ["NET_ADMIN", "NET_RAW"]
        env:
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: EVENT_QUEUE_DEPTH
          value: "5000"
        volumeMounts:
        - name: run
          mountPath: /run/flannel
        - name: flannel-cfg
          mountPath: /etc/kube-flannel/
        - name: xtables-lock
          mountPath: /run/xtables.lock
      volumes:
      - name: run
        hostPath:
          path: /run/flannel
      - name: cni-plugin
        hostPath:
          path: /opt/cni/bin
      - name: cni
        hostPath:
          path: /etc/cni/net.d
      - name: flannel-cfg
        configMap:
          name: kube-flannel-cfg
      - name: xtables-lock
        hostPath:
          path: /run/xtables.lock
          type: FileOrCreate
kubectl apply -f kube-flannel.yml
kubectl get pods --all-namespaces

k8s部署gitlab最新版并初始化和登录_CICD_05

当是running的状态后再查看集群的状态是否为ready
kubectl get nodes
2、k8s集群中如何在node节点上执行kubectl命令

在k8s集群中,一般我们只能在主节点上执行kubectl命令,那么如果想要在node节点运行kubectl命令,需要在node节点上~/.kube文件夹进行配置,一般我们只需要将master上的 ~/.kube文件夹复制到node节点上即可

在master节点上执行如下命令:

scp -r ~/.kube node1:~/  # node1为node节点ip

四、常用命令

查看namespace:

kubectl get pod --all-namespaces -o wide

查看pod详细信息:

kubectl describe pods gitlab-759f8b9599-nlm6z --namespace=default

查看pod简要port、IP信息:

kubectl get svc -o wide

查看实时日志:

kubectl logs -f --tail=200 gitlab-759f8b9599-nlm6z


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
  BBJ6jozQQLol   2023年12月07日   14   0   0 Jenkins
  KRsXEGSB49bk   2023年11月22日   16   0   0 本地缓存git取代码
  17eFBvSPo0pz   2023年11月19日   15   0   0 git
  KRsXEGSB49bk   2023年11月22日   15   0   0 git推送取代码
ZLGFQDxSRQTs