学习笔记—k8s交付 Dubbo服务提供者

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 1.环境安装jdk

1.环境安装jdk

[root@hdss7-11 src]# pwd
/opt/src
[root@hdss7-11 src]# ll
总用量 191596
-rw-r--r-- 1 root root   1096843 5月  18 20:01 flannel-v0.11.0-linux-amd64.tar.gz
-rw-r--r-- 1 root root 195094741 5月  28 11:06 jdk-8u221-linux-x64.tar.gz
[root@hdss7-11 src]# 
[root@hdss7-11 src]# mkdir /usr/java
[root@hdss7-11 src]# tar xf  jdk-8u221-linux-x64.tar.gz -C /usr/java/
[root@hdss7-11 src]# ln -s /usr/java/jdk1.8.0_221/ /usr/java/jdk
# vi /etc/profile
#JAVA HOME
export JAVA_HOME=/usr/java/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/bin:$PATH
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar

jdk集群分布: 7-12

[root@hdss7-12 src]# pwd
/opt/src
[root@hdss7-12 src]# ll
总用量 211168
-rw-r--r-- 1 root root  11288334 5月  12 2019 etcdkeeper-v0.7.5-linux_x86_64.zip
-rw-r--r-- 1 root root   9850227 5月  18 14:24 etcd-v3.1.20-linux-amd64.tar.gz
-rw-r--r-- 1 root root 195094741 5月  28 11:14 jdk-8u221-linux-x64.tar.gz
[root@hdss7-12 src]# 
[root@hdss7-12 src]# tar xf jdk-8u221-linux-x64.tar.gz -C /usr/java/
ln -s /usr/java/jdk1.8.0_221/ /usr/java/jdk

jdk集群分布:7-21

[root@hdss7-21 src]# pwd
/opt/src
[root@hdss7-21 src]# ll
总用量 211168
-rw-r--r-- 1 root root  11288334 5月  12 2019 etcdkeeper-v0.7.5-linux_x86_64.zip
-rw-r--r-- 1 root root   9850227 5月  18 14:24 etcd-v3.1.20-linux-amd64.tar.gz
-rw-r--r-- 1 root root 195094741 5月  28 11:14 jdk-8u221-linux-x64.tar.gz
[root@hdss7-21 src]# 
[root@hdss7-21 src]# tar xf jdk-8u221-linux-x64.tar.gz -C /usr/java/
ln -s /usr/java/jdk1.8.0_221/ /usr/java/jdk

2.部署zk集群涉及11.12.21机器

分布式:11

[root@hdss7-11 src]# ll
总用量 228392
-rw-r--r-- 1 root root   1096843 5月  18 20:01 flannel-v0.11.0-linux-amd64.tar.gz
-rw-r--r-- 1 root root 195094741 5月  28 11:06 jdk-8u221-linux-x64.tar.gz
-rw-r--r-- 1 root root  37676320 5月  28 11:29 zookeeper-3.4.14.tar.gz
 tar xf zookeeper-3.4.14.tar.gz -C /opt/
 ln -s /opt/zookeeper-3.4.14/ /opt/zookeeper
 mkdir -pv /data/zookeeper/data /data/zookeeper/logs
 vi /opt/zookeeper/conf/zoo.cfg
 tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/logs
clientPort=2181
server.1=zk1.od.com:2888:3888
server.2=zk2.od.com:2888:3888
server.3=zk3.od.com:2888:3888
[root@hdss7-11 opt]# vim /var/named/od.com.zone 
zk1                A    192.168.40.11
zk2                A    192.168.40.12
zk3                A    192.168.40.21
[root@hdss7-11 opt]#  echo 1 > /data/zookeeper/data/myid
[root@hdss7-11 opt]# /opt/zookeeper/bin/zkServer.sh status
[root@hdss7-11 opt]# /opt/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: follower

分布式12

[root@hdss7-12 src]# ll
总用量 228392
-rw-r--r-- 1 root root   1096843 5月  18 20:01 flannel-v0.11.0-linux-amd64.tar.gz
-rw-r--r-- 1 root root 195094741 5月  28 11:06 jdk-8u221-linux-x64.tar.gz
-rw-r--r-- 1 root root  37676320 5月  28 11:29 zookeeper-3.4.14.tar.gz
 tar xf zookeeper-3.4.14.tar.gz -C /opt/
 ln -s /opt/zookeeper-3.4.14/ /opt/zookeeper
  mkdir -pv /data/zookeeper/data /data/zookeeper/logs
 [root@hdss7-12 opt]# vi /opt/zookeeper/conf/zoo.cfg
[root@hdss7-12 opt]# cat /opt/zookeeper/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/logs
clientPort=2181
server.1=zk1.od.com:2888:3888
server.2=zk2.od.com:2888:3888
server.3=zk3.od.com:2888:3888
[root@hdss7-12 opt]#  echo 2 > /data/zookeeper/data/myid
[root@hdss7-12 opt]# /opt/zookeeper/bin/zkServer.sh start
[root@hdss7-12 opt]# /opt/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: follower

分布式21

[root@hdss7-21 src]# ll
总用量 228392
-rw-r--r-- 1 root root   1096843 5月  18 20:01 flannel-v0.11.0-linux-amd64.tar.gz
-rw-r--r-- 1 root root 195094741 5月  28 11:06 jdk-8u221-linux-x64.tar.gz
-rw-r--r-- 1 root root  37676320 5月  28 11:29 zookeeper-3.4.14.tar.gz
 tar xf zookeeper-3.4.14.tar.gz -C /opt/
 ln -s /opt/zookeeper-3.4.14/ /opt/zookeeper
 mkdir -pv /data/zookeeper/data /data/zookeeper/logs
 [root@hdss7-21 src]# cat /opt/zookeeper/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/logs
clientPort=2181
server.1=zk1.od.com:2888:3888
server.2=zk2.od.com:2888:3888
server.3=zk3.od.com:2888:3888
[root@hdss7-21 src]# echo 3 > /data/zookeeper/data/myid
[root@hdss7-21 src]# /opt/zookeeper/bin/zkServer.sh status
[root@hdss7-21 src]# /opt/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: leader

200上部署

# docker pull jenkins/jenkins:2.190.3
# docker tag 22b8b9a84dbe harbor.od.com/public/jenkins:v2.190.3
# docker push harbor.od.com/public/jenkins:v2.190.3
 ssh-keygen -t rsa -b 2048 -C "xxx@xx.xxx" -N "" -f /root/.ssh/id_rsa
 curl -fsSL get.docker.com -o get-docker.sh
 # chmod u+x get-docker.sh
# mkdir -p /data/dockerfile/jenkins/
# cd /data/dockerfile/jenkins
# vi Dockerfile
FROM harbor.od.com/public/jenkins:v2.190.3
USER root 
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\ 
    echo 'Asia/Shanghai' >/etc/timezone 
ADD id_rsa /root/.ssh/id_rsa 
ADD config.json /root/.docker/config.json
ADD get-docker.sh /get-docker.sh 
RUN echo "    StrictHostKeyChecking no" >> /etc/ssh/ssh_config &&\
    /get-docker.sh 
[root@hdss7-200 jenkins]# cp /root/.ssh/id_rsa .
[root@hdss7-200 jenkins]# curl -fsSL get.docker.com -o get-docker.sh
[root@hdss7-200 jenkins]#  chmod u+x get-docker.sh
[root@hdss7-200 jenkins]# docker build . -t harbor.od.com/infra/jenkins:v2.190.3

21上创建名称空间

kubectl create ns infra
[root@hdss7-21 ~]# kubectl create secret docker-registry harbor --docker-server=harbor.od.com --docker-username=admin --docker-password=Harbor12345 -n infra

3 共享存储

所有节点安装nfs

# 其他机器统一操作yum install nfs-utils -y
[root@hdss7-200 ~]# cat /etc/exports
/data/nfs-volume 192.168.40.0/24(rw,no_root_squash)
[root@hdss7-200 ~]#  mkdir -p mkdir /data/nfs-volume/jenkins_home
[root@hdss7-200 ~]#  systemctl start nfs
[root@hdss7-200 ~]#  systemctl enable nfs
[root@hdss7-200 ~]# cd /data/k8s-yaml/
[root@hdss7-200 k8s-yaml]# ls
coredns  dashboard  heapster  traefik
[root@hdss7-200 k8s-yaml]# mkdir jenkins
[root@hdss7-200 k8s-yaml]# cd jenkins/

4.jenkins资源配置清单

1.dp.yaml

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: jenkins
  namespace: infra
  labels: 
    name: jenkins
spec:
  replicas: 1
  selector:
    matchLabels: 
      name: jenkins
  template:
    metadata:
      labels: 
        app: jenkins 
        name: jenkins
    spec:
      volumes:
      - name: data
        nfs: 
          server: hdss7-200
          path: /data/nfs-volume/jenkins_home
      - name: docker
        hostPath: 
          path: /run/docker.sock   
          type: ''
      containers:
      - name: jenkins
        image: harbor.od.com/infra/jenkins:v2.190.3
        imagePullPolicy: IfNotPresent  
        ports:
        - containerPort: 8080
          protocol: TCP
        env:
        - name: JAVA_OPTS
          value: -Xmx512m -Xms512m
        volumeMounts:
        - name: data
          mountPath: /var/jenkins_home
        - name: docker
          mountPath: /run/docker.sock
      imagePullSecrets:
      - name: harbor
      securityContext: 
        runAsUser: 0
  strategy:
    type: RollingUpdate
    rollingUpdate: 
      maxUnavailable: 1
      maxSurge: 1
  revisionHistoryLimit: 7
  progressDeadlineSeconds: 600

New:    

namespace: infra 隶属于infra ns中

 

path: /run/docker.sock   这里挂载了宿主机的docker.sock,使容器内的docker客户端可以直接与宿主机的docker引擎进行通信



volumes nfs 类型的卷 server是运维管理主机200


imagePullPolicy  镜像拉取的策略


分为三种 1.无论如何都去从harbor仓库拉取镜像 2.无论如何都不去远程拉取  只是用本地 3.如何本地没有就去远程仓库拉


imagePullSecrets  拉取harbor私有仓库必须加此参数 否则拉取不到

2.svc.yaml

kind: Service
apiVersion: v1
metadata: 
  name: jenkins
  namespace: infra
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
  selector:
    app: jenkins

3.ingress.yaml

kind: Ingress
apiVersion: extensions/v1beta1
metadata: 
  name: jenkins
  namespace: infra
spec:
  rules:
  - host: jenkins.od.com
    http:
      paths:
      - path: /
        backend: 
          serviceName: jenkins
          servicePort: 80

4.应用资源配置清单:node节点

[root@hdss7-22 ~]# kubectl create -f http://k8s-yaml.od.com/jenkins/dp.yaml
deployment.extensions/jenkins created
[root@hdss7-22 ~]# kubectl create -f http://k8s-yaml.od.com/jenkins/svc.yaml
service/jenkins created
[root@hdss7-22 ~]# kubectl create -f http://k8s-yaml.od.com/jenkins/ingress.yaml

[root@hdss7-22 ~]#  kubectl get pod -n infra

NAME                       READY   STATUS    RESTARTS   AGE

jenkins-54b8469cf9-q59tk   1/1     Running   0          14h

5.jenkins基础优化

image.png

image.png

image.png

搜索蓝海插件并安装:blue ocean

image.png

6 二进制部署mvn  200操作

cd /opt/src

[root@hdss7-200 harbor]# wget https://archive.apache.org/dist/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz

# mkdir /data/nfs-volume/jenkins_home/maven-3.6.1-8u232

# tar -zxf apache-maven-3.6.1-bin.tar.gz -C /data/nfs-volume/jenkins_home/maven-3.6.1-8u232/

# cd /data/nfs-volume/jenkins_home/maven-3.6.1-8u232

# mv apache-maven-3.6.1/* ./

# rm -rf apache-maven-3.6.1/

# vi /data/nfs-volume/jenkins_home/maven-3.6.1-8u232/conf/settings.xml

image.png

制作dubbo微服务底包镜像:JAVA运行时环境的底包


[root@hdss7-200 ~]#  docker pull stanleyws/jre8:8u112


[root@hdss7-200 ~]#  docker pull stanleyws/jre8:8u112

[root@hdss7-200 ~]#  docker tag fa3a085d6ef1 harbor.od.com/public/jre:8u112

[root@hdss7-200 ~]# docker push harbor.od.com/public/jre:8u112

[root@hdss7-200 ~]# cd /data/dockerfile/

[root@hdss7-200 dockerfile]# ls

jenkins

[root@hdss7-200 dockerfile]# mkdir jre8

[root@hdss7-200 dockerfile]# cd jre8

[root@hdss7-200 jre8]# vi Dockerfile

FROM harbor.od.com/public/jre:8u112

RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\

   echo 'Asia/Shanghai' >/etc/timezone

ADD config.yml /opt/prom/config.yml

ADD jmx_javaagent-0.3.1.jar /opt/prom/

WORKDIR /opt/project_dir

ADD entrypoint.sh /entrypoint.sh

CMD ["/entrypoint.sh"]

下载jmx_javaagent,监控jvm信息:

[root@hdss7-200 jre8]#  wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.3.1/jmx_prometheus_javaagent-0.3.1.jar -O jmx_javaagent-0.3.1.jar

root@hdss7-200 jre8]# cat config.yml

---

rules:

- pattern: '.*'

创建entrypoint.sh使用exec 来运行java的jar包,能够使脚本将自己的pid 为‘1’ 传递给java进程,避免docker容器因没有前台进程而退出。并且不要加&符。

[root@hdss7-200 jre8]# cat entrypoint.sh

#!/bin/sh

M_OPTS="-Duser.timezone=Asia/Shanghai -javaagent:/opt/prom/jmx_javaagent-0.3.1.jar=$(hostname -i):${M_PORT:-"12346"}:/opt/prom/config.yml"

C_OPTS=${C_OPTS}

JAR_BALL=${JAR_BALL}

exec java -jar ${M_OPTS} ${C_OPTS} ${JAR_BALL}


[root@hdss7-200 jre8]# chmod +x entrypoint.sh


# docker build . -t harbor.od.com/base/jre8:8u112


[root@hdss7-200 jre8]# docker push  harbor.od.com/base/jre8:8u112

7 jenkins  参数化构建

除了base_image和maven是choice parameter,其他都是string parameter

添加完成后,效果如图:

pipeline {
  agent any 
    stages {
      stage('pull') { //get project code from repo 
        steps {
          sh "git clone ${params.git_repo} ${params.app_name}/${env.BUILD_NUMBER} && cd ${params.app_name}/${env.BUILD_NUMBER} && git checkout ${params.git_ver}"
        }
      }
      stage('build') { //exec mvn cmd
        steps {
          sh "cd ${params.app_name}/${env.BUILD_NUMBER}  && /var/jenkins_home/maven-${params.maven}/bin/${params.mvn_cmd}"
        }
      }
      stage('package') { //move jar file into project_dir
        steps {
          sh "cd ${params.app_name}/${env.BUILD_NUMBER} && cd ${params.target_dir} && mkdir project_dir && mv *.jar ./project_dir"
        }
      }
      stage('image') { //build image and push to registry
        steps {
          writeFile file: "${params.app_name}/${env.BUILD_NUMBER}/Dockerfile", text: """FROM harbor.od.com/${params.base_image}
ADD ${params.target_dir}/project_dir /opt/project_dir"""
          sh "cd  ${params.app_name}/${env.BUILD_NUMBER} && docker build -t harbor.od.com/${params.image_name}:${params.git_ver}_${params.add_tag} . && docker push harbor.od.com/${params.image_name}:${params.git_ver}_${params.add_tag}"
        }
      }
    }
}

image.png

image.png

构建时间有点久 先去抽根烟

8 资源配置清单

已经有了,接下来交付dubbo-demo-service服务到k8s:

准备k8s资源配置清单:7-200 红色部分,需要根据自己构建镜像的tag来进行修改

[root@hdss7-200 nginx]#  mkdir /data/k8s-yaml/dubbo-server/

[root@hdss7-200 nginx]# cd /data/k8s-yaml/dubbo-server/

[root@hdss7-200 dubbo-server]# cat  dp.yaml 
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: dubbo-demo-service
  namespace: app
  labels: 
    name: dubbo-demo-service
spec:
  replicas: 1
  selector:
    matchLabels: 
      name: dubbo-demo-service
  template:
    metadata:
      labels: 
        app: dubbo-demo-service
        name: dubbo-demo-service
    spec:
      containers:
      - name: dubbo-demo-service
        image: harbor.od.com/app/dubbo-demo-service:master_20200602_1730
        ports:
        - containerPort: 20880
          protocol: TCP
        env:
        - name: JAR_BALL
          value: dubbo-server.jar
        imagePullPolicy: IfNotPresent
      imagePullSecrets:
      - name: harbor
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      securityContext: 
        runAsUser: 0
      schedulerName: default-scheduler
  strategy:
    type: RollingUpdate
    rollingUpdate: 
      maxUnavailable: 1
      maxSurge: 1
  revisionHistoryLimit: 7
  progressDeadlineSeconds: 600

由于我们使用的harbor私有镜像的项目是app,是个私有项目,所以需要创建secret资源:

# kubectl create ns app

# kubectl create secret docker-registry harbor --docker-server=harbor.od.com --docker-username=admin --docker-password=Harbor12345 -n app

# kubectl apply -f http://k8s-yaml.od.com/dubbo-server/dp.yaml

检查是否启动成功:

# kubectl logs dubbo-demo-service-77b687c6f8-v556v -n app

image.png

查看是否已经注册到zk中

image.png


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
16天前
|
人工智能 Kubernetes 安全
赋能加速AI应用交付,F5 BIG-IP Next for Kubernetes方案解读
赋能加速AI应用交付,F5 BIG-IP Next for Kubernetes方案解读
56 13
|
2月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
141 60
|
2月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
271 62
|
1月前
|
存储 Kubernetes 网络协议
k8s的无头服务
Headless Service 是一种特殊的 Kubernetes 服务,其 `spec:clusterIP` 设置为 `None`,不会分配 ClusterIP,通过 DNS 解析提供服务发现。与普通服务不同,Headless Service 不提供负载均衡功能,每个 Pod 都有唯一的 DNS 记录,直接映射到其 IP 地址,适用于有状态应用的场景,如与 StatefulSet 一起部署数据库。示例中通过创建 Nginx 的 StatefulSet 和 Headless Service,展示了如何直接访问单个 Pod 并进行内容修改。
53 3
|
2月前
|
Prometheus Kubernetes 监控
k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用
k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用
139 1
k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用
|
1月前
|
存储 Kubernetes Devops
Kubernetes集群管理和服务部署实战
Kubernetes集群管理和服务部署实战
56 0
|
2月前
|
监控 Dubbo Java
dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。
这篇文章详细介绍了如何将Spring Boot与Dubbo和Zookeeper整合,并通过Dubbo管理界面监控服务注册情况。
173 0
dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。
|
2月前
|
负载均衡 Kubernetes 区块链
随机密码生成器+阿里k8s负载均衡型服务加证书方法+移动终端设计+ico生成器等
随机密码生成器+阿里k8s负载均衡型服务加证书方法+移动终端设计+ico生成器等
64 1
|
2月前
|
Kubernetes 应用服务中间件 nginx
k8s学习--kubernetes服务自动伸缩之水平收缩(pod副本收缩)VPA策略应用案例
k8s学习--kubernetes服务自动伸缩之水平收缩(pod副本收缩)VPA策略应用案例
|
2月前
|
Kubernetes 监控 调度
k8s学习--kubernetes服务自动伸缩之垂直伸缩(资源伸缩)VPA详细解释与安装
k8s学习--kubernetes服务自动伸缩之垂直伸缩(资源伸缩)VPA详细解释与安装
120 1

热门文章

最新文章