PowerShell 技能连载 - Kubernetes 节点智能编排

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
function Invoke-K8sNodeOrchestration {
[CmdletBinding()]
param(
[ValidateSet('ScaleUp','ScaleDown','Maintenance')]
[string]$Operation,
[int]$NodeCount = 1
)

$nodePool = Get-AzAksNodePool -ClusterName 'prod-cluster'
$metrics = Invoke-RestMethod -Uri 'http://k8s-metrics:8080/api/v1/nodes'

switch ($Operation) {
'ScaleUp' {
$newCount = $nodePool.Count + $NodeCount
Update-AzAksNodePool -Name $nodePool.Name -Count $newCount
Write-Host "节点池已扩容至$newCount个节点"
}
'ScaleDown' {
$nodesToRemove = $metrics.Nodes |
Where-Object { $_.CpuUsage -lt 20 } |
Select-Object -First $NodeCount
$nodesToRemove | ForEach-Object {
Set-AzAksNode -Name $_.Name -State Draining
}
}
'Maintenance' {
$metrics.Nodes | Where-Object { $_.HealthStatus -ne 'Healthy' } |
ForEach-Object {
Add-K8sNodeLabel -Node $_.Name -Label @{
'maintenance' = (Get-Date).ToString('yyyyMMdd')
}
}
}
}
}

核心功能

  1. 节点自动扩缩容策略
  2. 基于资源利用率的智能调度
  3. 维护模式自动标签管理
  4. 与Azure AKS深度集成

典型应用场景

  • 应对突发流量自动扩容节点
  • 低负载时段自动缩容节约成本
  • 异常节点自动隔离维护
  • 跨可用区节点平衡管理

PowerShell 技能连载 - 容器化脚本自动化管理

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
function Invoke-ContainerPipeline {
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[string]$ImageName,
[string]$DockerfilePath = './Dockerfile'
)

$report = [PSCustomObject]@{
Timestamp = Get-Date -Format 'yyyy-MM-dd HH:mm:ss'
BuildLog = @()
DeploymentStatus = @()
}

# 构建Docker镜像
$buildOutput = docker build -t $ImageName -f $DockerfilePath . 2>&1
$report.BuildLog += $buildOutput

# 推送镜像到仓库
if ($LASTEXITCODE -eq 0) {
$pushOutput = docker push $ImageName 2>&1
$report.BuildLog += $pushOutput
}

# 部署到Kubernetes
if ($LASTEXITCODE -eq 0) {
$k8sOutput = kubectl apply -f deployment.yaml 2>&1
$report.DeploymentStatus += [PSCustomObject]@{
Cluster = (kubectl config current-context)
Status = if($LASTEXITCODE -eq 0){'Success'}else{'Failed'}
Output = $k8sOutput
}
}

# 生成HTML报告
$htmlReport = $report | ConvertTo-Html -Fragment
$htmlReport | Out-File "$env:TEMP/ContainerReport_$(Get-Date -Format yyyyMMdd).html"
return $report
}

核心功能

  1. Docker镜像自动化构建
  2. 容器仓库自动推送
  3. Kubernetes部署集成
  4. HTML运维报告生成

典型应用场景

  • 持续集成/持续部署(CI/CD)
  • 跨环境容器镜像管理
  • 蓝绿部署策略实施
  • 容器化应用生命周期管理

PowerShell 技能连载 - 自动化部署Kubernetes集群

在云原生技术普及的今天,Kubernetes已成为容器编排的事实标准。传统部署方式需要手动执行多步操作,本文介绍如何通过PowerShell实现本地开发环境的Kubernetes集群自动化部署,显著提升环境搭建效率。

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
# 创建Kubernetes部署模块
function New-KubeCluster {
param(
[ValidateSet('minikube','k3s','microk8s')]
[string]$ClusterType = 'minikube',
[int]$WorkerNodes = 2
)

try {
# 环境预检
if (-not (Get-Command docker -ErrorAction SilentlyContinue)) {
throw "Docker引擎未安装"
}

# 根据不同集群类型执行部署
switch ($ClusterType) {
'minikube' {
minikube start --nodes=$WorkerNodes --driver=docker
minikube addons enable ingress
}
'k3s' {
Invoke-WebRequest -Uri https://get.k3s.io | bash -s -- --worker $WorkerNodes
}
'microk8s' {
snap install microk8s --classic
microk8s enable dns dashboard ingress
}
}

# 验证集群状态
$status = kubectl cluster-info
Write-Host "集群部署完成:$status"
}
catch {
Write-Error "部署失败:$_"
}
}

代码实现原理:

  1. 通过环境预检确保Docker已安装,这是所有本地Kubernetes方案的运行基础
  2. 支持三种主流轻量级Kubernetes发行版,通过参数切换部署类型
  3. 使用minikube时自动创建指定数量的Worker节点并启用Ingress控制器
  4. 部署完成后自动验证集群状态,输出连接信息
  5. 异常处理机制捕获部署过程中的常见错误

此脚本大幅简化了开发环境的搭建流程,通过封装复杂的CLI命令为可重复使用的PowerShell函数,特别适合需要频繁重建测试环境的CI/CD场景。

PowerShell 技能连载 - Docker容器生命周期管理

在容器化技术广泛应用的今天,Docker容器的日常管理成为运维工作的重要环节。本文将演示如何通过PowerShell实现容器生命周期的自动化管理,包括创建、启停和监控等操作。

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
function Manage-DockerContainer {
param(
[ValidateSet('Create','Start','Stop','Remove')]
[string]$Action,
[string]$ImageName,
[string]$ContainerName
)

try {
switch ($Action) {
'Create' {
docker run -d --name $ContainerName $ImageName
}
'Start' {
docker start $ContainerName
}
'Stop' {
docker stop $ContainerName
}
'Remove' {
docker rm -f $ContainerName
}
}

# 获取容器状态
$status = docker inspect -f '{{.State.Status}}' $ContainerName
Write-Host "$($Action)操作完成,当前状态:$status"
}
catch {
Write-Error "$Action操作失败:$_"
}
}

实现原理分析:

  1. 通过Docker命令行接口实现容器操作
  2. 参数验证机制确保操作类型合法性
  3. 支持创建/启动/停止/删除四大核心操作
  4. 操作完成后自动获取并返回容器实时状态
  5. 异常处理机制捕获常见容器操作错误

该脚本将容器管理操作封装为可重复使用的函数,特别适合需要批量管理多个容器实例的微服务架构场景。