Go学习笔记 - 指针详解

指针是什么?

在Go语言中,指针是一个变量,它存储了另一个变量的内存地址。因此,指针变量指向的是另一个变量的内存地址,而不是变量本身。

声明指针变量时,需要在变量名前加上 *,表示这是一个指针变量,例如:

kind构建轻量级kubernetes集群

最近在复习Golang,写了一个web应用,本地跑通以后想在k8s集群测试一番,苦于机器配置原因, 搭建一套完整的k8s集群还是有一些力不从心,记得之前有朋友说过docker里也可以跑k8s,于是这就折腾了一番。

自定义Jenkins Agent集成docker和kubectl工具

由于我们Jenkins构建的时候,官方提供的jenkins-agent没有我们使用的工具,比如helm,kubectl,curl,argocd等,因此,我们需要集成进来。

Jenkins Workspace和Maven仓库本地持久化存储

创建本地存储

由于是测试集群,我们这里直接使用本地volume存储即可;

由于这里jenkins server里运行用户为jenkins,且jenkins的uid为1000,我们需要在node1上提前将/opt/jenkins_agent/和/opt/jenkins_maven/权限授权给jenkins

Go学习笔记 - Go基础知识复习

一、基础知识

1、基本数据类型

  • 值类型:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
bool(长度1Byte或1个字节)
byte(1个字节,uint8别名)
rune(4个字节,int32别名,-231~231)
int(32 or 64,长度4或8字节)
int8(长度1字节)、int16(长度2字节)、int32(长度4字节)、int64(长度8字节)
uint(32 or 64,长度4或8字节)
uint8(长度1字节)、uint16(长度4字节)、uint32(长度4字节)、uint64(长度8字节)
float32(长度4字节)、float64(长度8字节)
string     //一串固定长度字符连接起来的序列,底层为byte数组
complex64、complex128(默认)//复数类型
array   //数组(固定长度)
struct  //结构体
  • 引用类型(指针类型):
1
2
3
slice  //序列数组,默认值nil
map //映射,默认值nil
chan // 管道,默认值nil

2、编码&&字符串

golang默认编码是UTF-8

kubernetes环境下部署Jenkins

一、安装部署Jenkins

1、手动安装

手动安装就很简单,提前将yaml配置准备好即可, 所有CICD资源jenkins-install.yaml内容如下:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
apiVersion: v1
kind: PersistentVolume
metadata:
  name: jenkins-pv
spec:
  storageClassName: local # Local PV
  capacity:
    storage: 30Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  local:
    path: /opt/jenkins
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
                - node02
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jenkins-pvc
  namespace: kube-ops
spec:
  storageClassName: local
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 30Gi
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: jenkins
  namespace: kube-ops
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: jenkins
rules:
  - apiGroups: ["extensions", "apps"]
    resources: ["deployments", "ingresses"]
    verbs: ["create", "delete", "get", "list", "watch", "patch", "update"]
  - apiGroups: [""]
    resources: ["services"]
    verbs: ["create", "delete", "get", "list", "watch", "patch", "update"]
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["create", "delete", "get", "list", "patch", "update", "watch"]
  - apiGroups: [""]
    resources: ["pods/exec"]
    verbs: ["create", "delete", "get", "list", "patch", "update", "watch"]
  - apiGroups: [""]
    resources: ["pods/log", "events"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["secrets"]
    verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: jenkins
  namespace: kube-ops
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: jenkins
subjects:
  - kind: ServiceAccount
    name: jenkins
    namespace: kube-ops
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins
  namespace: kube-ops
spec:
  selector:
    matchLabels:
      app: jenkins
  template:
    metadata:
      labels:
        app: jenkins
    spec:
      serviceAccount: jenkins
      initContainers:
        - name: fix-permissions
          image: busybox
          command: ["sh", "-c", "chown -R 1000:1000 /var/jenkins_home"]
          securityContext:
            privileged: true
          volumeMounts:
            - name: jenkinshome
              mountPath: /var/jenkins_home
      containers:
        - name: jenkins
          #image: jenkins/jenkins:lts
          image: jenkins/jenkins:2.375.3-lts #这里我们选用最新稳定版本
          imagePullPolicy: IfNotPresent
          env:
          - name: JAVA_OPTS
            value: -Dhudson.model.DownloadService.noSignatureCheck=true
          ports:
            - containerPort: 8080
              name: web
              protocol: TCP
            - containerPort: 50000
              name: agent
              protocol: TCP
          resources:
            limits:
              cpu: 1500m
              memory: 4096Mi
            requests:
              cpu: 1500m
              memory: 2048Mi
          readinessProbe:
            httpGet:
              path: /login
              port: 8080
            initialDelaySeconds: 60
            timeoutSeconds: 5
            failureThreshold: 12
          volumeMounts:
            - name: jenkinshome
              mountPath: /var/jenkins_home
      volumes:
        - name: jenkinshome
          persistentVolumeClaim:
            claimName: jenkins-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: jenkins
  namespace: kube-ops
  labels:
    app: jenkins
spec:
  selector:
    app: jenkins
  ports:
    - name: web
      port: 8080
      targetPort: web
    - name: agent
      port: 50000
      targetPort: agent
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: jenkins
  namespace: kube-ops
spec:
  ingressClassName: traefik
  rules:
  - host: jenkins.test.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: jenkins
            port:
              number: 8080

安装Jenkins

Delve版本过低无法适配Goland

问题

Goland下最近调试代码,总是报如下错误:

1
WARNING: undefined behavior - version of Delve is too old for Go version 1.19.3 (maximum supported version 1.18)

解决方法

问题的大概的意思是Delve版本过低,无法满足当前的Golang版本

给博客自动续签免费SSL证书

背景

如果你拥有一个网站或者独立博客,你每年都需要关心自己网站SSL证书过期问题,最近wnote.com证书也快过期了;

申请SSL证书,既让网站支持https访问,市面上有免费的也有收费的;