春风十里不如你 —— Taozi - 服务 https://www.xiongan.host/index.php/tag/%E6%9C%8D%E5%8A%A1/ zh-CN Mon, 30 Oct 2023 01:41:00 +0800 Mon, 30 Oct 2023 01:41:00 +0800 基于Kubernetes集群的监控网络服务 https://www.xiongan.host/index.php/archives/226/ https://www.xiongan.host/index.php/archives/226/ Mon, 30 Oct 2023 01:41:00 +0800 admin 基于Kubernetes集群的监控网络服务

介绍

需要以下环境

  • Kubernetes集群
  • Blackbox工具
  • Grafana、Prometheus监控

大致功能:通过在K8s集群中部署blackbox工具(用于监控服务,检查网络可用性)和Grafana、Prometheus(监控可视化面板)更直观的体现网络连通性,可以进行警报和分析

本文章通过若海博客的Kubernetes 集群上安装 Blackbox 监控网站状态】和【Kubernetes 集群上安装 Grafana 和 Prometheus】整合而成

部署Kubernetes集群(Ubuntu/Debian操作系统)

确保主节点和子节点都有Docker环境(最好是同一个版本)

主节点

//安装Docker,一键安装(如有安装可以忽略)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
//开启docker、并设置开机自启
systemctl start docker & systemctl enable docker
apt update
apt install -y wireguard

echo "net.ipv4.ip_forward = 1" >/etc/sysctl.d/ip_forward.conf
sysctl -p /etc/sysctl.d/ip_forward.conf
//以下Token值请保存,任意字符串
export SERVER_TOKEN=r83nui54eg8wihyiteshuo3o43gbf7u9er63o43gbf7uitujg8wihyitr6

export PUBLIC_IP=$(curl -Ls http://metadata.tencentyun.com/latest/meta-data/public-ipv4)
export PRIVATE_IP=$(curl -Ls http://metadata.tencentyun.com/latest/meta-data/local-ipv4)

export INSTALL_K3S_SKIP_DOWNLOAD=true
export DOWNLOAD_K3S_BIN_URL=https://github.com/k3s-io/k3s/releases/download/v1.28.2%2Bk3s1/k3s

if [ $(curl -Ls http://ipip.rehi.org/country_code) == "CN" ]; then
   DOWNLOAD_K3S_BIN_URL=https://ghproxy.com/${DOWNLOAD_K3S_BIN_URL}
fi

curl -Lo /usr/local/bin/k3s $DOWNLOAD_K3S_BIN_URL
chmod a+x /usr/local/bin/k3s

curl -Ls https://get.k3s.io | sh -s - server \
    --cluster-init \
    --token $SERVER_TOKEN \
    --node-ip $PRIVATE_IP \
    --node-external-ip $PUBLIC_IP \
    --advertise-address $PRIVATE_IP \
    --service-node-port-range 5432-9876 \
    --flannel-backend wireguard-native \
    --flannel-external-ip

子节点

//安装Docker,一键安装(如有安装可以忽略)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
//开启docker、并设置开机自启
systemctl start docker & systemctl enable docker
//子节点代码
apt update
apt install -y wireguard

echo "net.ipv4.ip_forward = 1" >/etc/sysctl.d/ip_forward.conf
sysctl -p /etc/sysctl.d/ip_forward.conf

export SERVER_IP=43.129.195.33 //此ip填你的主节点地址
export SERVER_TOKEN=r83nui54eg8wihyiteshuo3o43gbf7u9er63o43gbf7uitujg8wihyitr6

export PUBLIC_IP=$(curl -Ls http://metadata.tencentyun.com/latest/meta-data/public-ipv4)
export PRIVATE_IP=$(curl -Ls http://metadata.tencentyun.com/latest/meta-data/local-ipv4)

export INSTALL_K3S_SKIP_DOWNLOAD=true
export DOWNLOAD_K3S_BIN_URL=https://github.com/k3s-io/k3s/releases/download/v1.28.2%2Bk3s1/k3s

if [ $(curl -Ls http://ipip.rehi.org/country_code) == "CN" ]; then
   DOWNLOAD_K3S_BIN_URL=https://ghproxy.com/${DOWNLOAD_K3S_BIN_URL}
fi

curl -Lo /usr/local/bin/k3s $DOWNLOAD_K3S_BIN_URL
chmod a+x /usr/local/bin/k3s

curl -Ls https://get.k3s.io | sh -s - agent \
    --server https://$SERVER_IP:6443 \
    --token $SERVER_TOKEN \
    --node-ip $PRIVATE_IP \
    --node-external-ip $PUBLIC_IP

Blackbox工具部署(也有集群方式)

//拉取镜像
docker pull rehiy/blackbox
//一键启动
docker run -d \
    --name blackbox \
    --restart always \
    --publish 9115:9115 \
    --env "NODE_NAME=guangzhou-taozi" \
    --env "NODE_OWNER=Taozi" \
    --env "NODE_REGION=广州" \
    --env "NODE_ISP=TencentCloud" \
    --env "NODE_BANNER=From Taozii-www.xiongan.host" \
    rehiy/blackbox
//开始注册
docker logs -f blackbox

image-20231029233949787

Grafana、Prometheus部署

在主节点创建一个目录,名字任意,然后在同一目录中创建两个文件(grafpro.yaml、grafpro.sh)

grafpro.yaml

kind: Deployment
apiVersion: apps/v1
metadata:
  name: &name grafpro
  labels:
    app: *name
spec:
  selector:
    matchLabels:
      app: *name
  template:
    metadata:
      labels:
        app: *name
    spec:
      initContainers:
        - name: busybox
          image: busybox
          command:
            - sh
            - -c
            - |
              if [ ! -f /etc/prometheus/prometheus.yml ]; then
              cat <<EOF >/etc/prometheus/prometheus.yml
              global:
                scrape_timeout: 25s
                scrape_interval: 1m
                evaluation_interval: 1m

              scrape_configs:
                - job_name: prometheus
                  static_configs:
                    - targets:
                        - 127.0.0.1:9090
              EOF
              fi
          volumeMounts:
            - name: *name
              subPath: etc
              mountPath: /etc/prometheus
      containers:
        - name: grafana
          image: grafana/grafana
          securityContext:
            runAsUser: 0
          ports:
            - containerPort: 3000
          volumeMounts:
            - name: *name
              subPath: grafana
              mountPath: /var/lib/grafana
        - name: prometheus
          image: prom/prometheus
          securityContext:
            runAsUser: 0
          ports:
            - containerPort: 9090
          volumeMounts:
            - name: *name
              subPath: etc
              mountPath: /etc/prometheus
            - name: *name
              subPath: prometheus
              mountPath: /prometheus
      volumes:
        - name: *name
          hostPath:
            path: /srv/grafpro
            type: DirectoryOrCreate
---
kind: Service
apiVersion: v1
metadata:
  name: &name grafpro
  labels:
    app: *name
spec:
  selector:
    app: *name
  ports:
    - name: grafana
      port: 3000
      targetPort: 3000
    - name: prometheus
      port: 9090
      targetPort: 9090
---
kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
  name: &name grafpro
  annotations:
    traefik.ingress.kubernetes.io/router.entrypoints: web,websecure
spec:
  rules:
    - host: grafana.example.org
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: *name
                port:
                  name: grafana
    - host: prometheus.example.org
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: *name
                port:
                  name: prometheus
  tls:
    - secretName: default

grafpro.sh

//警告:请修改路径和访问域名
# 配置存储路径
export GRAFPRO_STORAGE=${GRAFPRO_STORAGE:-"/srv/grafpro"}
# 配置访问域名
export GRAFANA_DOMAIN=${GRAFPRO_DOMAIN:-"grafana.example.org"}
export PROMETHEUS_DOMAIN=${PROMETHEUS_DOMAIN:-"prometheus.example.org"}

# 修改参数并部署服务
cat grafpro.yaml \
    | sed "s#/srv/grafpro#$GRAFPRO_STORAGE#g" \
    | sed "s#grafana.example.org#$GRAFANA_DOMAIN#g" \
    | sed "s#prometheus.example.org#$PROMETHEUS_DOMAIN#g" \
    | kubectl apply -f -

部署

chmod +x grafpro.sh
./grafpro.sh

测试打开

注意以下,开启端口9115、9090
浏览器打开地址http://grafana.example.org 账号密码都是admin,首次登录,提示修改密码,修改后自动跳到控制台
浏览器打开http://grafana.example.org/connections/datasources/选择第一个,然后编辑URL为:http://127.0.0.1:9090 然后保存
然后选择创建好的Prometheus,导入面板

浏览器打开http://prometheus.example.org,查看信息

image-20231030002818047

image-20231030003050033

image-20231030003343689

配置Promethues任务

//回到主节点的/srv/grafpro/etc目录下
编辑yml文件,备份一下原有的yml,创建新的yml
mv prometheus.yml prometheus00.yml
//以下是yml文件内容(若部署时修改了负载名称blackbox-exporter,下文的配置文件也要做相应的修改)
global:
  scrape_timeout: 15s
  scrape_interval: 1m
  evaluation_interval: 1m

scrape_configs:
  # prometheus
  - job_name: prometheus
    static_configs:
      - targets:
          - 127.0.0.1:9090
  # blackbox_all
  - job_name: blackbox_all
    static_configs:
      - targets:
          - blackbox-gz:9115
        labels:
          region: '广州,腾讯云'
  # http_status_gz
  - job_name: http_status_gz
    metrics_path: /probe
    params:
      module: [http_2xx] #配置get请求检测
    static_configs:
      - targets:
          - https://www.example.com
        labels:
          project: 测试1
          desc: 测试网站描述1
      - targets:
          - https://www.example.org
        labels:
          project: 测试2
          desc: 测试网站描述2
    basic_auth:
      username: ******
      password: ******      
    relabel_configs:
      - target_label: region
        replacement: '广州,腾讯云'
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: blackbox-gz:9115:80

然后重启svc,方法如下:首先查看pod

kubectl get pod
然后删除查看到关于grafana的pod,然后稍等几分钟即可
kubectl delete pod *

导入 Grafana 仪表盘

下载附件json在Grafana仪表盘里导入即可

image-20231030010749235

导入后可以查看到监控仪已经开始了,显示各项信息

image-20231030012948467

image-20231030013016056

]]>
0 https://www.xiongan.host/index.php/archives/226/#comments https://www.xiongan.host/index.php/feed/tag/%E6%9C%8D%E5%8A%A1/
【MySQL】主从复制介绍及配置 https://www.xiongan.host/index.php/archives/216/ https://www.xiongan.host/index.php/archives/216/ Wed, 14 Jun 2023 20:42:42 +0800 admin MySQL的主从复制

什么是mysql的主从复制?

MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。
MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可
以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。

主从原理三个步骤:

  • 在主库上把数据更改记录到二进制日志中(Binary Log)中,这些记录称为二进制日志事件。
  • 从库通过IO线程将主库上的日志复制到自己的中继日志(Relay Log)中。
  • 从库通过SQL线程读取中继日志中的事件,将其重放到自己数据上。

主从形式(五个)

包括一主一从、主主复制、一主多从、多主一从、连级复制

mysql主从复制安装配置(一主一从)

主机名ip
master192.168.11.10(mysql5.7)
node192.168.11.20(mysql5.7)

数据库安装rpm方式(两台)

下载rpm文件

wget https://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm

68670917464

安装下载好的rpm文件

yum -y localinstall mysql57-community-release-el7-10.noarch.rpm

安装成功后会在/etc/yum.repos.d/下看到两个新增加的repo文件

68670938840

使用yum安装mysql

yum -y install mysql-community-server --nogpgcheck

68670970003

设置mysql服务开机自启

#启动mysql服务
systemctl start mysqld
#设置mysql开机启动
systemctl enable mysqld --now

获取mysql服务的临时密码

grep "password" /var/log/mysqld.log

68670979253

使用临时密码登录,进入后修改密码,并修改远程访问权限(也可以不用)

mysql -uroot -p
#输入密码
//修改密码
set global validate_password_policy=0; 修改密码策略
set global validate_password_length=1; 修改密码长度
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; 修改密码为123456
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant
option; 允许其他机器远程连接
flush privileges;

68671008383

主从配置

在两台数据库中分别创建数据库

--注意两台必须全部执行
create database tz;

在主(master)服务器进行如下配置:

#修改配置文件,执行以下命令打开mysql配置文件
vi /etc/my.cnf
#在mysqld模块中添加如下配置信息
log-bin=master-bin #二进制文件名称
binlog-format=ROW #二进制日志格式,有row、statement、mixed三种格式,row指的是把改变的内
容复制过去,而不是把命令在从服务器上执行一遍,statement指的是在主服务器上执行的SQL语句,在从服
务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。mixed指的是默认采用基于语句的复
制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。
server-id=1 #要求各个服务器的id必须不一样
binlog-do-db=zq #同步的数据库名称

68671052097

配置从服务器登录主服务器的账号授权

--授权操作
set global validate_password_policy=0;
set global validate_password_length=1;
grant replication slave on *.* to 'root'@'%' identified by '123456';
--刷新权限
flush privileges;

68671065825

从服务器配置(node节点)

#修改配置文件,执行以下命令打开mysql配置文件
vi /etc/my.cnf
#在mysqld模块中添加如下配置信息
log-bin=master-bin #二进制文件的名称
binlog-format=ROW #二进制文件的格式
server-id=2 #服务器的id

68671075815

重启主服务器的mysql服务

#重启mysql服务
systemctl restart mysqld
#登录mysql数据库
mysql -uroot -p
#查看master的状态
show master status;

68671085837

重启从服务器(node)并进行相关配置

#重启mysql服务
systemctl restart mysqld
#登录mysql
mysql -uroot -p
#连接主服务器
change master to master_host='192.168.11.10',master_user='root',master_password='123456',master_port=3306,master_log_file='master-bin.000001',master_log_pos=154;
#启动slave
start slave;
#查看slave的状态
show slave status\G(注意没有分号)

68671110334

验证主从数据库

//主库中:
mysql> use tz;
mysql> create table user(id int,age int);
mysql> insert into user values(1,1);

68671122292

从库中查看

mysql> use tz;
mysql> show tables;
mysql> select * from user;

68671129271

注意:

  • 主库中插入数据,从库中会实现同步。
  • 从库中插入数据,主库不会实现同步。
]]>
0 https://www.xiongan.host/index.php/archives/216/#comments https://www.xiongan.host/index.php/feed/tag/%E6%9C%8D%E5%8A%A1/
【k8s】将Go服务上传到k8s https://www.xiongan.host/index.php/archives/215/ https://www.xiongan.host/index.php/archives/215/ Wed, 07 Jun 2023 22:56:55 +0800 admin 将Go服务发布到k8s集群

首先安装go环境

下载go的tar.gz包,可以前往阿里云镜像站go页面下载相应版本地址:https://mirrors.aliyun.com/golang/?spm=a2c6h.13651104.mirror-free-trial.1.75b41e57BOxyw5

然后下载到虚拟机中,并且解压到/usr/local/src中

//解压缩go包
[root@master ~]# tar -zxf go1.18.10.linux-amd64.tar.gz -C /usr/local/src
//添加环境变量
[root@master src]# vim /etc/profile
//添加如下:
export GOROOT=/usr/local/src
export PATH=$PATH:$GOROOT/bin
//保存退出后source一下
source /etc/profile
//查看是否成功
go version

创建源码文件

[root@master ~]# mkdir 0607tz
[root@master ~]# cd 0607tz/
[root@master 0607tz]# vim main.go
//编辑到文件中
package main

import (
        "net/http"

        "github.com/gin-gonic/gin"
)

func statusOKHandler(c *gin.Context) {
        c.JSON(http.StatusOK, gin.H{"status": "success~welcome to study"})
}

func versionHandler(c *gin.Context) {
        c.JSON(http.StatusOK, gin.H{"version": "v1.1版本"})
}

func main() {
        router := gin.New()
        router.Use(gin.Recovery())
        router.GET("/", statusOKHandler)
        router.GET("/version", versionHandler)
        router.Run(":8080")
}

Go mod初始化项目

初始化项目

[root@master 0607tz]# go mod init 0607tz
go: creating new go.mod: module 0607tz
go: to add module requirements and sums:
        go mod tidy
//成功初始化
//设置代理
[root@master 0607tz]# go env -w GOPROXY=https://goproxy.cn,direct
[root@master 0607tz]# go mod tidy
//构建源码
[root@master 0607tz]# CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o k8s-demo main.go

68609962763

68609970371

创建镜像

编写dockerfile文件

[root@master 0607tz]# vim Dockerfile
FROM alpine
ADD k8s-demo /data/app/
WORKDIR /data/app/
CMD ["/bin/sh","-c","./k8s-demo"]

构建镜像

[root@master 0607tz]# docker build -t taozheng/k8sdemo:v1 .

68610002587

打包镜像,传到k8s工作节点

[root@master 0607tz]# docker save -o k8sdemo.tar.gz taozheng/k8sdemo:v1 
[root@master 0607tz]# scp k8sdemo.tar.gz node:/root/
k8sdemo.tar.gz                                100%   16MB  68.0MB/s   00:00
//在node节点解压镜像

68610036977

创建deployment的yaml文件

[root@master 0607tz]# vim k8s.yaml
//k8s.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: k8s-demo
  namespace: default
  labels:
    app: k8s-demo
    cy: taozheng
spec:
  selector:
    matchLabels:
      app: k8s-demo
  replicas: 4
  template:
    metadata:
      labels:
        app: k8s-demo
    spec:
      containers:
      - image: taozheng/k8sdemo:v1
        imagePullPolicy: IfNotPresent
        name: k8s-demo
        ports:
        - containerPort: 8080
          protocol: TCP
        resources:
          limits:
            cpu: 100m
            memory: 100Mi
          requests:
            cpu: 50m
            memory: 50Mi
        livenessProbe:
          tcpSocket:
            port: 8080
          initialDelaySeconds: 10
          timeoutSeconds: 3
        readinessProbe:
          httpGet:
            path: /
            port: 8080
          initialDelaySeconds: 10
          timeoutSeconds: 2

创建go的服务

[root@master 0607tz]# vim gosvc.yaml
kind: Service
apiVersion: v1
metadata:
  name: k8s-demo-svc
  namespace: default
  labels:
    app: k8s-demo
    cy: taozheng
spec:
  ports:
    - name: api
      port: 8080
      protocol: TCP
      targetPort: 8080
  selector:
    app: k8s-demo

k8s部署

68610144309

查看pod和服务信息

68610148691

修改svc的type类型变成nodePort

[root@master 0607tz]# kubectl edit svc k8s-demo-svc

68610160469

保存后再次查看,已经修改成功

68610172769

查看svc标签

68610189875

浏览器测试访问:

68610205900

68610208689

]]>
0 https://www.xiongan.host/index.php/archives/215/#comments https://www.xiongan.host/index.php/feed/tag/%E6%9C%8D%E5%8A%A1/
【swarm】docker环境下的集群服务 https://www.xiongan.host/index.php/archives/139/ https://www.xiongan.host/index.php/archives/139/ Wed, 09 Nov 2022 11:38:00 +0800 admin 介绍
Docker Swarm是Docker原生的集群工具,因而无须使用额外的编排软件创建或管理集群。Docker
Swarm部署更简单,适合规模不大的应用程序环境,尤其适用于简单和快速开发。

Docker-swarm

Docker Client:客户端 Swarm Manager: 管理器节点 Scheduler:调度器

Discovery Service:服务发现 Swarm Node:工作者节点 Docker Containers:容器

基本命令

集群管理命令

docker swarm ca:显示和轮转根CA。
docker swarm init:初始化集群。
docker swarm join:作为节点加入集群。
docker swarm join-token:管理加入集群的令牌。
docker swarm leave:脱离集群。
docker swarm unlock:解锁集群。
docker swarm unlock-key:管理解锁密钥。
docker swarm update:更新集群

节点管理命令

docker node demote:将一个或多个管理器节点降级为工作者节点。
docker node inspect:显示一个或多个节点的详细信息。
docker node ls:列出Swarm集群中的节点。
docker node promote:将一个或多个节点升级为管理器节点。
docker node ps:列出在一个或多个节点(默认为当前节点)上运行的任务。
docker node rm:从Swarm集群中删除一个或多个节点。
docker node update:更新节点的选项,如可用性、标签或角色。

实践操作

主机名ip角色
Manager192.168.123.100主控
Worker01192.168.123.101节点01
Worker02192.168.123.102节点02

初始化swarm集群

在管理器节点上执行以下命令获取加入管理器角色节点的命令(含令牌)

docker swarm init --advertise-addr 192.168.123.100

swarm_init

添加节点

将上操作中的代码复制到worker01、02主机上

add

add

查看集群信息

docker node list

list

]]>
0 https://www.xiongan.host/index.php/archives/139/#comments https://www.xiongan.host/index.php/feed/tag/%E6%9C%8D%E5%8A%A1/
【ansible】linux下的集群管理服务 https://www.xiongan.host/index.php/archives/137/ https://www.xiongan.host/index.php/archives/137/ Tue, 08 Nov 2022 17:33:00 +0800 admin 介绍

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。Ansible架构相对比较简单,仅需通过SSH连接客户机执行任务即可

主机名ip角色
Server192.168.123.195主控
Backend01192.168.123.196被控01
Backend02192.168.123.197被控02

安装ansible

准备eple源

这边使用的是阿里云的源

wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo

下载完成后就可以安装ansible服务

yum install -y ansible openssh-clients

配置ansible

修改配置文件

 vim /etc/ansible/ansible.cfg
  //* 71 行,取消注释。开启关闭对未连接的主机 SSH 秘钥检测
  host_key_checking = False

编写 Ansible 主机管理文件

mv /etc/ansible/hosts /etc/ansible/hosts.bak ##先备份一下内容
vi /etc/ansible/hosts ##建立目标群组,并写入被管机(目标服务器)的 IP/FQDN
[tz1101]
backend01
backend02

测试连通性

ansible tz1101 -m ping

test-ping

Tip:配置ssh免密才可以出现上面结果的

配置ssh免密登陆

ssh-keygen

一路回车,默认免密通信

ssh-copy-id ip/主机名

把密钥发送到集群主机中

另外在需要/etc/hosts中写入主机名和ip

/etc/hosts

ansible应用

添加用户

为集群主机添加单独用户

ansible tz1101 -m user -a 'name=tao state=present'

添加完成用户后再设置一个密码,在server端用pip python 生成哈希密码

首先安装pip python

yum install python-pip -y

生成密码

ansible tz1101 -m user -a 'name=tao password=tarRU/F9EJjRU update_password=always'

查看一下

user

playbook剧本

测试集群安装一个httpd软件的playbook剧本

vim playbook_create_install.yml #编写剧本文件→安装软件
- hosts: tz1101 #集群组名
  tasks:
    - name: install vsftpd ##任务名称
      yum: name=vsftpd state=installed ##安装vsftpd
    - name: running and enabled
      service: name=vsftpd state=started enabled=yes ##设置开机自启动

httpd

使用tag标签

创建tag文件yml

tag

注:自定义了tag,他就会只执行带有tag=test2的内容其他标签内容不会执行

使用变量

自定义变量安装服务

- hosts: tz1101
  become: yes
  become_method: sudo
  tasks:
  - name: installed bao
    yum: name={{ item }} state=installed
    with_items:
      - vim-enhanced ##软件名
      - wget
      - unzip
    tags: Taozheng

bianliang

ansible-playbook bianliang.yml

bianliang

roles

内网中需要关闭防火墙和selinux

ansible tz1101 -a "setenforce 0 && systemctl stop firewalld"

在当前server主机内安装tree服务

yum install -y tree

群组下的主机也要安装tree软件

ansible tz1101 -m yum -a "name=tree state=installed"/*-m 使用模块 yum命令 -a是具体内容 name是tree state是操作安装

tree

创建roles子目录及内容

mkdir -p roles/ins_httpd/{files,tasks,vars}

回到roles,编写一个yml文件

Vim playbook_httpd.yml
- hosts: tz1101
  roles:
      - ins_httpd
编写vars下的main文件
vim roles/ins_httpd/vars/main.yml
packages:
 - httpd

创建任务剧本

编写tasks下的main文件
vim roles/ins_httpd/tasks/main.yml
- name: httpd is installed
  yum: name=httpd state=installed
  tags: install_httpd

- name: edit httpd.conf
  lineinfile: >
      dest=/etc/httpd/conf/httpd.conf
      regexp="{{item.regexp}}"
      line="{{item.line}}"
  with_items:
  - { regexp: "^#ServerName",line: "ServerName {{ansible_fqdn}}:80" }
  tags: edit_httpd.conf

- name: httpd is running and enabled
  service: name=httpd state=started enabled=yes

- name: put index.html
  copy: src=index.html dest=/var/www/html owner=root group=root mode=0644

playbook

执行剧本

ansible-playbook playbook_httpd.yml

role

role

查看写入的httpd的index.html

ansible tz1101 -m shell -a "curl localhost"

image.png

]]>
0 https://www.xiongan.host/index.php/archives/137/#comments https://www.xiongan.host/index.php/feed/tag/%E6%9C%8D%E5%8A%A1/