Xiongan-host 雄安 https://www.xiongan.host/ zh-CN Your description here.记录生活,记录美,来自雄安host Sun, 28 May 2023 12:39:44 +0800 Sun, 28 May 2023 12:39:44 +0800 【Hadoop】全分布式安装集群 https://www.xiongan.host/index.php/archives/213/ https://www.xiongan.host/index.php/archives/213/ Sun, 28 May 2023 12:39:44 +0800 admin Hadoop全分布式安装

环境准备

首先做免密登录,三台虚拟机分别生成秘钥文件

//三台都需要操作
ssh-keygen -t rsa
//三台都需要打以下命令,进行秘钥分发
[root@tz1-123 ~]# ssh-copy-id tz1-123
[root@tz1-123 ~]# ssh-copy-id tz2-123
[root@tz1-123 ~]# ssh-copy-id tz3-123

修改防火墙设置后,查看三台虚拟机防火墙状态

//三台,禁止防火墙自启,立即生效
systemctl disable firewalld --now

安装JDK(3台),首先上传安装包到根目录,然后解压在/usr/lib/jvm

//修改环境变量/etc/profile
JAVA_HOME=/usr/lib/jvm/jdk1.8.0_152
JRE_HOME=$JAVA_HOME/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH

部署

首先将Hadoop软件包上传至/root中,并解压在/usr/local/src/下

68232799551

修改core-site.xml

//将以下内容加在<configuration></configuration>之间
<property>
<!--hdfs地址-->
<name>fs.defaultFS</name>
<value>hdfs://tz1-123:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/src/hadoop/data/tmp</value>
</property>

68232814920

修改hadoop-env.sh

//在最后添加以下一条
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_152

68232825693

修改hdfs-site.xml

//将以下内容加在<configuration></configuration>之间
<!--副本集个数-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--SecondaryNamenode的http地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>tz3-123:50090</value>
</property>

68232849666

修改yarn-env.sh

//在最后添加以下一条
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_152

68232858392

修改yarn-site.xml

//将以下内容加在<configuration></configuration>之间
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>tz2-123</value>
</property>

68232868835

修改mapred-env.sh

//在最后添加以下一条
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_152

修改mapred-site.xml

[root@tz1-123 hadoop]# cp mapred-site.xml.template mapred-site.xml
[root@tz1-123 hadoop]# vim mapred-site.xml
//将以下内容加在<configuration></configuration>之间
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

修改slaves

[root@tz1-123 hadoop]# vim slaves
tz1-123
tz2-123
tz3-123

分发Hadoop软件包

[root@tz1-123 hadoop]# scp -r /usr/local/src/hadoop tz2-123:/usr/local/src/
[root@tz1-123 hadoop]# scp -r /usr/local/src/hadoop tz3-123:/usr/local/src/

修改/etc/profile

//在最后添加以下内容
export HADOOP_HOME=/usr/local/src/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
//修改完成后再次分发,并加在环境变量
[root@tz1-123 hadoop]# source /etc/profile
[root@tz1-123 hadoop]# scp /etc/profile tz2-123:/etc/
[root@tz1-123 hadoop]# scp /etc/profile tz3-123:/etc/

在tz1-123(master)上格式化namenode

hdfs namenode -format

68232948333

启动集群并测试

[hadoop@tz1-123 ~]$ start-dfs.sh
[hadoop@tz2-123 ~]$ start-yarn.sh
[root@tz1-123 hadoop]# jps
8096 NameNode
24690 NodeManager
24882 Jps
8293 DataNode
[root@tz2-123 ~]# jps
30709 NodeManager
24086 DataNode
30567 ResourceManager
781 Jps
[root@tz3-123 ~]# jps
23988 DataNode
604 Jps
30494 NodeManager

HDFS Shell操作

HDFS Shell操作以hadoop fs或hdfs dfs开头。

#查看某路径下文件夹
hadoop fs -ls HDFS路径
#在HDFS上创建文件夹
hadoop fs -mkdir HDFS文件夹路径
#在HDFS上创建文件夹(上级目录不存在)
hadoop fs -mkdir -p HDFS文件夹路径
#将本地文件上传到HDFS上
hadoop fs -put 本地文件路径 HDFS路径
#查看集群文件的内容
hadoop fs -cat HDFS文件路径
#从HDFS上下载文件到本地
hadoop fs -get HDFS文件路径 本地路径
#删除HDFS上空文件夹
hadoop fs -rmdir HDFS文件夹路径
#删除HDFS上的非空文件夹
hadoop fs -rm -r HDFS文件夹路径
#删除HDFS上的文件
hadoop fs -rm HDFS文件路径
#将HDFS上的路径剪切至另一个路径下
hadoop fs -mv HDFS源路径 HDFS目标路径
#将HDFS上的路径复制到另一个路径下
hadoop fs -cp HDFS源路径 HDFS目标路径
#在HDFS上创建一个文件
hadoop fs -touchz HDFS路径
]]>
0 https://www.xiongan.host/index.php/archives/213/#comments https://www.xiongan.host/index.php/feed/
【Docker】k8s健康检查 https://www.xiongan.host/index.php/archives/212/ https://www.xiongan.host/index.php/archives/212/ Sun, 28 May 2023 12:05:24 +0800 admin 健康检查

使用存活探针

创建使用 execaction 模式的存活探针 pod 的 yaml 文件。

68489166457

需要创建目录(/tmp/healthy)查看到运行成功,持续监控pod状态,看到pod反复重启

68489177496

使用 describe 命令查看详细 pod 信息,正常

68489215771

创建使用 http 存活探针的 pod 的 yaml 文件。

创建yaml

68489270782

运行并查看状态

68489266877

查看详细events

68489274944

创建使用 tcp 存活探针的 pod 的 yaml,模板采用 httpd 容器镜像。

创建yaml文件

68489334782

运行并进行容器内操作

68489330745

查看pod的restarts次数

68489340633

查看pod之前未通过liveness的记录

68489347800

就绪探针

创建 http 的 deployment 的 yaml 文件,其中配置 readiness 探针。

运行deployment

68489537126

68489538966

使用describechakanhttp服务的endpoint

68489544567

可以看到有4个地址

进入一个容器,删除index.html文件

68489549710

再使用 describe 命令查看 endpoint

68489553113

可以看到删除的pod地址已经从endpoint中移除

查看pod的详细信息,看到pod未通过探针检测

68489560281

查看pod信息,kandaopod处于notready状态

68489564469

]]>
0 https://www.xiongan.host/index.php/archives/212/#comments https://www.xiongan.host/index.php/feed/
【Spark】集群服务安装 https://www.xiongan.host/index.php/archives/211/ https://www.xiongan.host/index.php/archives/211/ Sat, 27 May 2023 19:52:58 +0800 admin Spark

安装

上传压缩包并解压

68137587637

修改用户权限

[root@master-tz src]# chown -R hadoop:hadoop spark

切换hadoop用户,进入目录

[hadoop@master-tz conf]$ pwd
/usr/local/src/spark/conf

修改spark-env.sh文件

[hadoop@master-tz conf]$ cp spark-env.sh.template spark-env.sh
[hadoop@master-tz conf]$ vim spark-env.sh
//添加如下内容
export JAVA_HOME=/usr/local/src/java
export HADOOP_HOME=/usr/local/src/hadoop
export SPARK_MASTER_IP=master-tz
export SPARK_MASTER_PORT=7077
export SPARK_DIST_CLASSPATH=$(/usr/local/src/hadoop/bin/hadoop classpath)
export HADOOP_CONF_DIR=/usr/local/src/hadoop/etc/hadoop
export SPARK_YARN_USER_ENV="CLASSPATH=/usr/local/src/hadoop/etc/hadoop"
export YARN_CONF_DIR=/usr/local/src/hadoop/etc/hadoop

修改slaves

[hadoop@master-tz conf]$ cp slaves.template slaves
[hadoop@master-tz conf]$ vim slaves
//添加如下
master-tz
slave01-tz
slave02-tz

68223988058

将spark分发到slave1,slave2

[root@master-tz conf]# scp -r /usr/local/src/spark/ slave01-tz:/usr/local/src/
[root@master-tz conf]# scp -r /usr/local/src/spark/ slave02-tz:/usr/local/src/

68224013701

发送完毕后,启动spark集群

[hadoop@master-tz conf]$ /usr/local/src/spark/sbin/start-all.sh

68224033758

浏览器查看(ip:8080)

68224040218

使用

本地运行模式测试。使用本地模式运行Spark Pi程序

/usr/local/src/spark/bin/spark-submit --class org.apache.spark.examples.SparkPi --master local[*] /usr/local/src/spark/examples/jars/spark-examples_2.11-2.0.0.jar 10

68224129012

Standalone模式运行Spark Pi程序

[hadoop@master-tz conf]$ /usr/local/src/spark/bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://master-tz:7077 /usr/local/src/spark/examples/jars/spark-examples_2.11-2.0.0.jar 10

68224157035

运行成功后,在浏览器内也可以看到

68224161345

Spark的集中运行模式

首先修改配置文件

<!--spark-env.sh文件,增加以下内容-->
export SPARK_DIST_CLASSPATH=$(/usr/local/src/hadoop/bin/hadoop classpath)
export HADOOP_CONF_DIR=/usr/local/src/hadoop/etc/hadoop
export SPARK_YARN_USER_ENV="CLASSPATH=/usr/local/src/hadoop/etc/hadoop"
export YARN_CONF_DIR=/usr/local/src/hadoop/etc/hadoop
<!--yarn-site.xml文件,增加以下内容-->
<property>
<name>yarn.nodemanager.pmem-checkenabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-checkenabled</name>
<value>false</value>
</property>

68224257337

再次分发文件到slave01、slave02

68224269037

yarn-cluster模式使用指令

[hadoop@master-tz hadoop]$ /usr/local/src/spark/bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster /usr/local/src/spark/examples/jars/spark-examples_2.11-2.0.0.jar 2

68224353111

68224351442

yarn-client使用指令

/usr/local/src/spark/bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode client /usr/local/src/spark/examples/jars/spark-examples_2.11-2.0.0.jar 2

68224363064

68224365893

]]>
0 https://www.xiongan.host/index.php/archives/211/#comments https://www.xiongan.host/index.php/feed/
【ENSP】GRE协议基础配置 https://www.xiongan.host/index.php/archives/210/ https://www.xiongan.host/index.php/archives/210/ Mon, 22 May 2023 19:07:26 +0800 admin GRE协议基础配置

本实验模拟企业网络场景,R1为企业总部的网关设备,并且内部有一台服务器,R3连接着企业分公司网关设备,R2为公网ISP设备。一般情况下,运营商只会维护自身的公网路由信息,而不会维护企业内部私网的路由信息,即运营商设备上的路由表中不会出现任何企业内部私网的路由条目。通过配置GRE实现公司总部和分部间私网路由信息的透传及数据通信。

拓扑实验

1684725003897

1684724964839

实验步骤

配置接口端口地址,根据上图信息进行配置

检测R1、R3直连链路的连通性

1684725679943

1684725739113

配置R1、R3默认路由

[R1]ip route-static 0.0.0.0 0.0.0.0 10.1.12.2
[R3]ip route-static 0.0.0.0 0.0.0.0 10.1.23.2

测试PC1和Server1的连通性

1684726077765

可以观察到,跨越了互联网的两个私网网段之间默认是无法直接通信的。此时可以通过GRE协议来实现跨越了互联网的两个私网网段之间的通信。

配置GRE Tunnel

配置R1、R3的GRE tunnel

在路由器R1、R3上配置GRE Tunnel,使用命令interface tunnel创建隧道接口,指定隧道模式为GRE。配置R1、R3 Tunnel接口的源地址为其S 1/0/0接口IP地址,目的地址为R1/R3的S 1/0/0接口IP地址。还要使用命令ip address配置Tunnel接口的IP地址,注意要在同一网段。

1684726463543

1684726570311

测试R1与目的地址的连通性

1684726676501

检查R1、R3隧道接口状态

1684726763561

1684726845074

检查R1、R3路由表

1684726889733

1684726908531

配置基于GRE接口的动态路由协议

测试PC1与Server1的连通性,发现还不能联通

1684727035010

配置R1、R3 RIPv2协议

1684727119110

1684727171142

检查R1、R3的RIP邻居

1684727223382

1684727242742

检查R1、R3路由表

1684727283255

1684727309531

测试PC1和Server1的连通性,可以看到已经联通

1684727349281

查看R2的路由表

1684727393881

]]>
0 https://www.xiongan.host/index.php/archives/210/#comments https://www.xiongan.host/index.php/feed/
【ENSP】RSTP和MSTP基础配置 https://www.xiongan.host/index.php/archives/209/ https://www.xiongan.host/index.php/archives/209/ Mon, 22 May 2023 19:00:23 +0800 admin RSTP、MSTP基础配置

实验组网

1684719281673

任务步骤

设备开启STP,并将STP模式切换为RSTP

[S1]stp enable
[S1]stp mode rstp
[S2]stp enable
[S2]stp mode rstp
[S3]stp enable
[S3]stp mode rstp
[S4]stp enable
[S4]stp mode rstp

1684720282267

查看STP的状态和统计信息摘要

1684720489701

1684720513926

1684720543670

1684720568088

在S1上查看STP的状态和统计信息(S1为根桥交换机)

1684720917704

根桥选举控制

配置S1为主根桥,S2为备份根桥

[S1]stp priority 4096
[S2]stp priority 8192

在另外两台交换机保持默认桥优先级(32768)的情况下,S1拥有最小的桥优先级,S2次之。

再次查看S1上的状态信息(此时S1的桥优先级为4096,并且此时仍然是根桥)

1684721119496

取消S1、S2上手动调整桥优先级的配置,使用stp root命令指定根桥和备份根桥

[S1]undo stp priority
[S1]stp root primary
[S2]undo stp priority
[S2]stp root secondary

查看S1和S2的stp状态信息

1684721311217

1684721329737

S1的桥优先级为0,而S2的桥优先级为4096,此时S1为根桥,S2为备份根桥。

修改接口开销控制根端口选举

在S4上查看stp状态和统计信息

1684721474502

S4上0/0/2拥有更小的RPC(根路径开销),从而成为根端口

查看S4的0/0/2的STP状态和统计信息

1684721623276

此时路径开销计算方法为Dotlt,接口的STP cost的值为20000

修改S4的0/0/2的STP cost值为40001

[S4]interface g0/0/2
[S4-GigabitEthernet0/0/2]stp cost 40001
[S4-GigabitEthernet0/0/2]

查看s4的STP状态信息

1684721879063

此时0/0/1的RPC为40000,小鱼0/0/2的RPC 40001 S4的0/0/1接口成为根端口

修改接口优先级控制根端口选举

查看S2的STP状态信息

1684722038120

S2上GE0/0/10、GE0/0/11接口收到的BPDU拥有相同的RPC、网桥ID、接口优先级,此时将会比较接收到的BPDU接口ID中的接口编号。

在S1、S2上开启LLDP,查看接口的互联关系

[S1]lldp enable
[S2]lldp enable
[S2]display lldp neighbor brief

1684722179609

S2的GE0/0/10接口对端为S1的GE0/0/10接口,S2的GE0/0/11接口对端为S1的GE0/0/11接口,S2的GE0/0/10接口接收到的BPDU拥有更小的接口编号,这是GE0/0/10成为根端口的原因

在S1上修改GE0/0/11的STP接口优先级,使其发送的BPDU优于 GE0/0/10发送的BPDU

[S1]interface GigabitEthernet 0/0/11
[S1-GigabitEthernet0/0/11] stp port priority 64

STP接口优先级为128,数值越小越优。

再次查看S2的stp状态信息

1684722305430

此时S2的GE0/0/10接口成为根端口。

MSTP基础配置

在所有交换机上创建VLAN10、20、30、40、50、60、70、80,配置MSTP域hcip,并创建两个新的实例:Instance 1、Instance 2,将VLAN10、30、50、70映射到Instance 1,将VLAN20、40、60、80映射到Instance 2,同时将SW1规划为MSTI1的主根桥、MSTI2的备份根桥,将SW2规划为MSTI2的主根桥、MSTI1的备份根桥。

[S1]vlan batch 10 20 30 40 50 60 70 80
[S2]vlan batch 10 20 30 40 50 60 70 80
[S3]vlan batch 10 20 30 40 50 60 70 80
[S4]vlan batch 10 20 30 40 50 60 70 80

将所有的互联接口(S1、S2、S3、S4)配置为Trunk接口,放通所有的(接口端口)Vlan

interface GigabitEthernet0/0/10
 port link-type trunk
 port trunk allow-pass vlan 10 20 30 40 50 60 70 80
#
interface GigabitEthernet0/0/11
 port link-type trunk
 port trunk allow-pass vlan 10 20 30 40 50 60 70 80
 stp instance 0 port priority 64
#
interface GigabitEthernet0/0/12
 port link-type trunk
 port trunk allow-pass vlan 10 20 30 40 50 60 70 80
#
interface GigabitEthernet0/0/13
 port link-type trunk
 port trunk allow-pass vlan 10 20 30 40 50 60 70 80

修改STP模式为MSTP

[S1]stp mode mstp
[S2]stp mode mstp
[S3]stp mode mstp
[S4]stp mode mstp

配置MSTP

[S1]stp region-configuration
[S1-mst-region] region-name hcip
[S1-mst-region] revision-level 1
[S1-mst-region] instance 1 vlan 10 30 50 70
[S1-mst-region] instance 2 vlan 20 40 60 80
[S1-mst-region] active region-configuration
Info: This operation may take a few seconds. Please wait for a moment...done.
[S1-mst-region] quit
/
[S2]stp region-configuration
[S2-mst-region] region-name hcip
[S2-mst-region] revision-level 1
[S2-mst-region] instance 1 vlan 10 30 50 70
[S2-mst-region] instance 2 vlan 20 40 60 80
[S2-mst-region] active region-configuration
Info: This operation may take a few seconds. Please wait for a moment...done.
[S2-mst-region] quit
/
[S3]stp region-configuration
[S3-mst-region] region-name hcip
[S3-mst-region] revision-level 1
[S3-mst-region] instance 1 vlan 10 30 50 70
[S3-mst-region] instance 2 vlan 20 40 60 80
[S3-mst-region] active region-configuration
Info: This operation may take a few seconds. Please wait for a moment...done.
[S3-mst-region] quit
/
[S4]stp region-configuration
[S4-mst-region] region-name hcip
[S4-mst-region] revision-level 1
[S4-mst-region] instance 1 vlan 10 30 50 70
[S4-mst-region] instance 2 vlan 20 40 60 80
[S4-mst-region] active region-configuration
Info: This operation may take a few seconds. Please wait for a moment...done.
[S4-mst-region] quit

在S1上检查MSTP实例和Vlan的映射关系

1684722873417

//配置SW1为MSTI1的根桥、MSTI2的备份根桥
[S1]stp instance 1 root primary 
[S1]stp instance 2 root secondary
//配置SW2为MSTI2的根桥、MSTI1的备份根桥
[S2]stp instance 1 root secondary 
[S2]stp instance 2 root primary

在S1上查看MST1状态信息

1684724119504

S1上所有接口都是指定接口,S1为MSTI1的根桥

1684724164486

S2上所有接口都是指定接口,S2为MSTI2的根桥。

]]>
0 https://www.xiongan.host/index.php/archives/209/#comments https://www.xiongan.host/index.php/feed/
【k8s】service服务和job服务 https://www.xiongan.host/index.php/archives/208/ https://www.xiongan.host/index.php/archives/208/ Wed, 17 May 2023 13:35:50 +0800 admin Service服务发现

使用Service

使用Service实验使用的目录病创建后端的httpd-Dy

[root@master servicefile]# vim httpd-dy.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
  name: httpd
spec:
  replicas: 3
  selector:
    matchLabels:
      app: httpd
  template:
    metadata:
      labels:
        app: httpd
    spec:
      containers:
      - name: httpd
        image: httpd
        ports:
        - containerPort: 80

部署Deployment并查看信息

68428286502

创建httpd-service.yaml文件

[root@master servicefile]# vim httpd-service.yaml

68428302420

创建service并查看该信息(下kubernetes服务是系统服务)

68428311268

测试服务可用性,通过curl命令查看服务是否正常

[root@master servicefile]# curl 10.102.124.67:8080

68428339308

可以删除刚刚创建的服务

68428345193

创建httpd-expose.yaml,并部署

[root@master servicefile]# vim httpd-expose.yaml
kind: Service
apiVersion: v1
metadata:
  name: httpd-svc
spec:
  type: NodePort
  selector:
    app: httpd
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 80
    nodePort: 30144

68428366522

使用跳板机浏览器登录,查看node节点ip:端口

68428375684

使用DNS

创建client.yaml,创建一个客户端pod,测试DNS功能

[root@master servicefile]# vim client.yaml
kind: Pod
apiVersion: v1
metadata:
  name: clientpod
spec:
  containers:
    - name: clientpod
      image: busybox:1.28.3
      args:
      - /bin/sh
      - -c
      - sleep 30000

创建并进入Pod命令行

[root@master servicefile]# kubectl apply -f client.yaml

使用nslookup命令查看服务域名,wget命令通过域名访问服务

68428417383

实训任务

创建deployment1

要求: 2 副本,镜像类型 httpd

68428612091

68428608656

创建deployment2

要求: 3副本,镜像类型 httpd

68428614089

68428616050

创建 service1,service1 后端为 deployment1 和 deployment2 中所有 pod。

68428621914

68428623761

创建 service2,service2 后端为 deployment1 中的第一个 pod 和 deployment2 中的第一个pod

为dy的第一个pod和dy2的第一个pod打上标签tz=httpd01

68428650498

68428651581

68428665013

68428668963

查看容器的详细信息

68428682792

查看端口信息,可以看到svc2的pod是要求所说的

68428673602

DeamonSet 与 Job

使用DaemonSet

创建一个Daemonset的yaml文件,并运行

[root@master servicefile]# vim DS-nginx.yaml
kind: DaemonSet
apiVersion: apps/v1
metadata:
  name: nginx-daemonset
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

68429120276

查看daemonset的pod信息位置

68429141307

删除pod,查看daemonset的自动恢复功能

68429156829

查看到已经恢复好了

68429158434

使用Job

创建Job的yaml文件

[root@master servicefile]# vim pi-job.yaml
kind: Job
apiVersion: batch/v1
metadata:
  name: pi
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4

创建Job并查看运行状态,他运行完毕后自动关闭了

68429246585

68429247721

查看他的运行结果

68429253813

使用CronJob

创建CronJob的yaml文件,设置每一分钟运行一次返回一次hello

[root@master servicefile]# vim CJ-hello.yaml
kind: CronJob
apiVersion: batch/v1beta1
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernets cluster-tz123
          restartPolicy: OnFailure

运行cronjob,查看运行情况

68429293265

查看pod的状态已经完成

68429294371

68429299912

可以查看到运行cronjob后,每隔一分钟就会创建新的pod的,并输出信息

实训任务

创建一个 DaemonSet

  1. 包含两个 pod
  2. 镜像为 nginx

创建一个job,用于输出helloworld

创建一个 cronjob,在每日的 xx 小时 xx 点输出 helloworld。

删除本次实验创建 DaemonSet,Job 和 CronJob。

]]>
0 https://www.xiongan.host/index.php/archives/208/#comments https://www.xiongan.host/index.php/feed/
【k8s】标签Label与Label Selector https://www.xiongan.host/index.php/archives/207/ https://www.xiongan.host/index.php/archives/207/ Tue, 16 May 2023 20:43:42 +0800 admin Label与Label Selector

标签

进入目录保存实验文件

并创建一个yaml使用多个标签

[root@master tz123]# cd /root/tz123/labfile/labelfile
[root@master labelfile]# vim labelpod.yaml
kind: Pod
apiVersion: v1
metadata:
  name: labelpod
  labels:
    app: busybox
    version: new
spec:
  containers:
    - name: labelpod
      image: busybox
      args:
      - /bin/sh
      - -c
      - sleep 30000

创建Pod,并查看pod的label

[root@master labelfile]# kubectl apply -f labelpod.yaml 
pod/labelpod created
[root@master labelfile]# kubectl get pod --show-labels
NAME       READY   STATUS    RESTARTS   AGE   LABELS
labelpod   1/1     Running   0          11s   app=busybox,version=new

为容器添加新标签

[root@master labelfile]# kubectl label pod labelpod time=2019
pod/labelpod labeled
[root@master labelfile]# kubectl get pod --show-labels
NAME       READY   STATUS    RESTARTS   AGE   LABELS
labelpod   1/1     Running   0          69s   app=busybox,time=2019,version=new

标签选择器

创建新的yaml

[root@master labelfile]# vim labelpod2.yaml
kind: Pod
apiVersion: v1
metadata:
  name: labelpod2
  labels:
    app: httpd
    version: new
spec:
  containers:
    - name: httpd
      image: httpd

创建并查看新创建的labelpod2

[root@master labelfile]# kubectl apply -f labelpod2.yaml
[root@master labelfile]# kubectl get pod --show-labels
NAME        READY   STATUS              RESTARTS   AGE   LABELS
labelpod    1/1     Running             0          12m   app=busybox,time=2019,version=new
labelpod2   0/1     ContainerCreating   0          23s   app=httpd,version=new

使用给予等值的标签选择器

[root@master labelfile]# kubectl get pod -l app=httpd
NAME        READY   STATUS    RESTARTS   AGE
labelpod2   1/1     Running   0          100s
或
[root@master labelfile]# kubectl get pod -l app==httpd
NAME        READY   STATUS    RESTARTS   AGE
labelpod2   1/1     Running   0          114s

使用基于不等值的标签选择器和查看pod针对某标签键的值

[root@master labelfile]# kubectl get pod -l app!=httpd
NAME       READY   STATUS    RESTARTS   AGE
labelpod   1/1     Running   0          14m
[root@master labelfile]# kubectl get pod -L app
NAME        READY   STATUS    RESTARTS   AGE    APP
labelpod    1/1     Running   0          15m    busybox
labelpod2   1/1     Running   0          3m5s   httpd

使用标签选择器实现调度

将节点1打上标签并查看

[root@master labelfile]# kubectl label node node env=test
node/node labeled
[root@master labelfile]# kubectl get node -L env
NAME     STATUS   ROLES                  AGE   VERSION   ENV
master   Ready    control-plane,master   91d   v1.20.6   
node     Ready    <none>                 91d   v1.20.6   test

使用nodeselector实现调度,创建新的yaml文件

[root@master labelfile]# vim nsdeploy.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
  name: nginx-dy
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80
      nodeSelector:
        env: test

查看deployment中的pod位置

[root@master labelfile]# kubectl get pod -o wide
NAME                        READY   STATUS    RESTARTS   AGE     IP               NODE   NOMINATED NODE   READINESS GATES
labelpod                    1/1     Running   0          28m     10.244.167.145   node   <none>           <none>
labelpod2                   1/1     Running   0          15m     10.244.167.146   node   <none>           <none>
nginx-dy-6dd6c76bcb-667ss   1/1     Running   0          5m19s   10.244.167.148   node   <none>           <none>
nginx-dy-6dd6c76bcb-q8tqh   1/1     Running   0          5m19s   10.244.167.149   node   <none>           <none>
nginx-dy-6dd6c76bcb-xc9h7   1/1     Running   0          5m19s   10.244.167.147   node   <none>           <none>

使用 node affinity 调度,创建一个新的 yaml 文件 nadeploy2.yaml

[root@master labelfile]# vim nadeploy2.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
  name: httpd-dy
  labels:
    app: httpd
spec:
  replicas: 3
  selector:
    matchLabels:
      app: httpd
  template:
    metadata:
      labels:
        app: httpd
    spec:
      containers:
      - name: httpd
        image: httpd
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: env
                operator: In
                values:
                - test

创建deployment并查看deployment中的pod位置,三个pod都在node上

[root@master labelfile]# kubectl apply -f nadeploy2.yaml 
deployment.apps/httpd-dy created
[root@master labelfile]# kubectl get pod -o wide
NAME                        READY   STATUS              RESTARTS   AGE   IP               NODE   NOMINATED NODE   READINESS GATES
httpd-dy-5b4bb9646-g4jzb    1/1     Running             0          33s   10.244.167.150   node   <none>           <none>
httpd-dy-5b4bb9646-lb876    1/1     Running             0          33s   10.244.167.151   node   <none>           <none>
httpd-dy-5b4bb9646-q7zcm    0/1     ContainerCreating   0          33s   <none>           node   <none>           <none>
labelpod                    1/1     Running             0          38m   10.244.167.145   node   <none>           <none>
labelpod2                   1/1     Running             0          26m   10.244.167.146   node   <none>           <none>
nginx-dy-6dd6c76bcb-667ss   1/1     Running             0          15m   10.244.167.148   node   <none>           <none>
nginx-dy-6dd6c76bcb-q8tqh   1/1     Running             0          15m   10.244.167.149   node   <none>           <none>
nginx-dy-6dd6c76bcb-xc9h7   1/1     Running             0          15m   10.244.167.147   node   <none>           <none>

实训任务

创建一个deployment

使用镜像nginx,5个副本

deployment中的pod不能出现在node上

[root@master labelfile]# vim shixun01.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
  name: nginx-dy
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: env
                operator: Not In
                values:
                - node

寻找一种方式搜索出kubernetes系统上提供core-dns,kubeproxy以及dashboard服务的pod

先给core-dns,kubeproxy,dashboard打上标签

68422694647

[root@master labelfile]# kubectl label -n kube-system pod kube-proxy-kj8j5 app=kubeproxy
[root@master labelfile]# kubectl label -n kube-system pod coredns-7f89b7bc75-n224r app=coredns

查找关键词的pod

68422698315

搜索dashboard的pod

68422720762

使用标签和标签选择器,使用一条命令删除node2节点的nginx

68422750468

]]>
0 https://www.xiongan.host/index.php/archives/207/#comments https://www.xiongan.host/index.php/feed/
【SDN】使用Postman下发流表 https://www.xiongan.host/index.php/archives/206/ https://www.xiongan.host/index.php/archives/206/ Thu, 11 May 2023 10:25:41 +0800 admin 使用Postman下发流表

实验环境检查

查看Opendaylight控制器

68324582647

登陆Opendaylight控制器,在查看控制器主机的6633端口监听状态

root@guest-virtual-machine:/home/guest# netstat -an|grep 6633

68324632013

关闭防火墙

sudo ufw disable

访问WEB页面

68324642802

在OVS主机(Miniet主机)中创建拓扑结构,并测试连通性

sudo mn --topo=single,3 --controller=remote,ip=192.168.123.10,port=6633 --switch ovsk,protocols=OpenFlow13

68324677224

在控制器页面查看到的拓扑图

68324681237

使用postman查看交换机id信息,交换机id为1

http://192.168.123.10:8080/restconf/operational/network-topology:network-topology

68324733334

下发第一条流表

PUT

http://192.168.123.10:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/0/flow/1

68324871215

主机1的MAC地址:00:0c:29:91:9c:e6
主机2的MAC地址:42:59:6f:b2:ee:64
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<flow xmlns="urn:opendaylight:flow:inventory">
<priority>200</priority>
<flow-name>Foo1</flow-name>
<idle-timeout>0</idle-timeout>
<hard-timeout>0</hard-timeout>
<match>
<ethernet-match>
<ethernet-source>
<address>00:0c:29:91:9c:e6</address>
</ethernet-source>
<ethernet-destination>
<address>42:59:6f:b2:ee:64</address>
</ethernet-destination>
</ethernet-match>
</match>
<id>1</id>
<table_id>0</table_id>
<instructions>
<instruction>
<order>0</order>
<apply-actions>
<action>
<order>0</order>
<output-action>
<output-node-connector>2</output-node-connector>
</output-action>
</action>
</apply-actions>
</instruction>
</instructions>
</flow>

下发第二条流表

http://192.168.123.10:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/0/flow/2
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<flow xmlns="urn:opendaylight:flow:inventory">
<priority>200</priority>
<flow-name>Foo1</flow-name>
<idle-timeout>0</idle-timeout>
<hard-timeout>0</hard-timeout>
<match>
<ethernet-match>
<ethernet-source>
<address>42:59:6f:b2:ee:64</address>
</ethernet-source>
<ethernet-destination>
<address>00:0c:29:91:9c:e6</address>
</ethernet-destination>
</ethernet-match>
</match>
<id>2</id>
<table_id>0</table_id>
<instructions>
<instruction>
<order>0</order>
<apply-actions>
<action>
<order>0</order>
<output-action>
<output-node-connector>1</output-node-connector>
</output-action>
</action>
</apply-actions>
</instruction>
</instructions>
</flow>

68324910358

登陆交换机,查看流表

ovs-ofctl dump-flows s1

删除第一条流表

http://192.168.123.10:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/0/flow/1

68324966554

删除第二条流表

http://192.168.123.10:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/0/flow/2

68324977418

]]>
0 https://www.xiongan.host/index.php/archives/206/#comments https://www.xiongan.host/index.php/feed/
【K8s】下的kubectl的Deployment部署Nginx https://www.xiongan.host/index.php/archives/205/ https://www.xiongan.host/index.php/archives/205/ Wed, 10 May 2023 21:00:59 +0800 admin 部署Nginx服务

简介:使用Deployment实现其滚动更新管理。

创建 Deployment

在 master 节点创建/labfile/deployfile 目录,用于保存配置文件。后续创建deployment 的 yaml 文件保存在此处。

[root@master ~]# mkdir labfile
[root@master ~]# cd labfile/
[root@master labfile]# mkdir deplofile
[root@master labfile]# cd deplofile/
[root@master deplofile]# vim nginx-dy.yaml
//以下内容为deployment文件
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-dy
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

部署该 nginx-dy

[root@master deplofile]# kubectl apply -f nginx-dy.yaml 
deployment.apps/nginx-dy created

查看详细信息、创建结果和replicaset

68368221905

68368214323

已经创建好:

68368227777

弹性伸缩 Deployment

编辑之前创建的nginx-dy.yaml,将副本数量修改5

68368234327

应用变更后的yaml文件

[root@master deplofile]# kubectl apply -f nginx-dy.yaml 
deployment.apps/nginx-dy configured
[root@master deplofile]# kubectl get pod

68368242410

滚动升级 deployment

复制ng原版为两个新版本

[root@master deplofile]# cp nginx-dy.yaml nginx-dy-v2.yaml 
[root@master deplofile]# cp nginx-dy.yaml nginx-dy-v3.yaml

68368254157

68368256811

进行滚动更新

[root@master deplofile]# kubectl apply -f nginx-dy-v2.yaml --record

查看更新状态,上为更新前版本

68368327387

查看replicaset,看到一个新的,里面有5个pod,原有的pod不存在了

68368337301

查看deployment更新事件

68368335839

更新到v3版本

[root@master deplofile]# kubectl apply -f nginx-dy-v3.yaml --record

68368352563

查看deployment的更新记录

[root@master deplofile]# kubectl rollout history deployment nginx-dy

68368370547

查看历史版本 2 的详细信息

[root@master deplofile]# kubectl rollout history deployment nginx-dy --revision=2

68368375317

回滚到历史版本2

[root@master deplofile]# kubectl rollout undo deployment nginx-dy --to-revision=2

68368385037

可以看到已经回滚到了版本2

删除deployment

[root@master deplofile]# kubectl delete deployment nginx-dy

68368392541

实训

查看deployment信息

68368444955

ymal文件搭建httpd

通过 yaml 文件创建一个 deployment,有如下要求:

  1. 使用 httpd:2.4
  2. 4副本
[root@master deplofile]# vim httpd-v1.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: httpd-dy
  labels:
    app: httpd
spec:
  replicas: 4
  selector:
    matchLabels:
      app: httpd
  template:
    metadata:
      labels:
        app: httpd
    spec:
      containers:
      - name: httpd
        image: httpd:2.4
        ports:
        - containerPort: 8080

开始创建

68368496033

将上面创建的deployment删除一个pod,变成副本3

编辑yaml文件

更新

68368512413

升级该 deployment 的镜像版本至 latest。

复制v1版本yaml为v2版本,并修改镜像版本号

68368559406

进行更新升级,看到版本已经升级到了latest

68368561618

寻找该 deployment 中各个 pod 运行节点,deployment 创建的时间戳(Creation Timestamp)。

68368575679

]]>
0 https://www.xiongan.host/index.php/archives/205/#comments https://www.xiongan.host/index.php/feed/
【SDN】防DDoS攻击应用开发 https://www.xiongan.host/index.php/archives/204/ https://www.xiongan.host/index.php/archives/204/ Sat, 06 May 2023 20:34:03 +0800 admin 防DDoS攻击SDN应用开发

基础环境

  • Opendaylight + Mininet (安装好karaf等组件)
  • Open vSwitch 2.3.1

实验步骤

查看控制器ip和交换机的连接状态

登录控制器,查看端口是否处于监听状态

netstat -an|grep 6633

68336330055

登录交换机,查看交换机与控制器的连接情况

root@guest-virtual-machine:/home/guest# ovs-vsctl show
2e6efe16-6875-4feb-8451-7da554fbd3c8
    ovs_version: "2.0.2"
//以上是交换机与控制器未连接成功,需要手动连接,显示以下的“is_connected:true”
root@guest-virtual-machine:/home/guest# ovs-vsctl add-br br-sw
root@guest-virtual-machine:/home/guest# ovs-vsctl set-controller br-sw tcp:192.168.123.10:6633
root@guest-virtual-machine:/home/guest# ovs-vsctl show

68336341161

登陆主机,查看主机与控制器连接情况,如果没连接,需要手动连接

登录交换机,连接控制器(基于OVSDB协议创建一个新的连接)

ovs-vsctl set-manager tcp:192.168.123.10:6640

68336412963

安装sFlow

将sFlow安装包上传至控制器,并解压

68336484626

登录交换机,部署sFlow Agent

ovs-vsctl -- --id=@sflow create sflow agent=s1 target=\"192.168.123.10:6633\" header=128 sampling=10 polling=1 -- set bridge br-sw sflow=@sflow

68336511422

查看已配置的sFlow Agent信息

ovs-vsctl list sflow

68336517033

登录控制器,启动sFlow

68336550170

验证防DDoS攻击

打开浏览器,查看状态

http://192.168.123.10:8008/html/index.html#status

68336584307

]]>
1 https://www.xiongan.host/index.php/archives/204/#comments https://www.xiongan.host/index.php/feed/