当前位置: 首页 > news >正文

使用Terraform管理已经存在的kubernates和默认的节点池

背景:

通过terraform resource "alicloud_cs_managed_kubernetes" "k8s" {...}创建集群时,会产生一个默认的节点池default-nodepool,但是如何去修改这个默认节点池的信息呢?

解决思路:

因为Terraform的state文件中并没有default-nodepool,因此如果你直接去main.tf中创建节点池default-nodepool时,会导致你现有的阿里云上的节点池被覆盖,最好的方式是通过以下命令去将阿里云上的default-nodepool资源导入到Terraform的state中,然后在main.tf中在去新建节点池default-nodepool并修改你想修改的内容,就可以不覆盖即有内容了。

$ terraform import alicloud_cs_kubernetes_node_pool.default-nodepool cluster_id:nodepool_id

通过下面命令查看目前terraform state正在管理的内容:

terraform state list

输出,

data.alicloud_zones.availability_zones
data.kubernetes_secret.helm_secret
data.local_file.kube_config
alicloud_cs_kubernetes_node_pool.k8s_pool
alicloud_cs_managed_kubernetes.k8s
alicloud_key_pair.deployer
alicloud_security_group.default
alicloud_vswitch.vswitches[0]
alicloud_vswitch.vswitches[1]
alicloud_vswitch.vswitches[2]
kubernetes_cluster_role_binding.cluster_role_for_helm
kubernetes_namespace.external_secrets
kubernetes_secret.onepassword_connect_secret
kubernetes_secret.onepassword_connect_token_infrastructure
kubernetes_service_account.sa_for_helm
null_resource.aliyun
null_resource.kube_config

可以看出目前没有默认的节点池default-nodepool,

在使用terraform import命令时,要先在main.tf中创建如下对应的节点池但不需要运行,

resource "alicloud_cs_kubernetes_node_pool" "default-nodepool" {name                  = "default-nodepool"cluster_id            = alicloud_cs_managed_kubernetes.k8s.idvswitch_ids           = alicloud_vswitch.vswitches.*.idinstance_types        = [var.csk_worker_instance_type]key_name              = alicloud_key_pair.deployer.key_nameinstall_cloud_monitor = trueplatform = "AliyunLinux"image_id = "aliyun_2_1903_x64_20G_alibase_20230704.vhd"
}

然后运行

$ terraform import alicloud_cs_kubernetes_node_pool.default-nodepool cluster_id:nodepool_id

导入成功后,通过如下命令可以再次查看输出内容

terraform state list

 data.alicloud_zones.availability_zones
data.kubernetes_secret.helm_secret
data.local_file.kube_config
alicloud_cs_kubernetes_node_pool.default-nodepool    
alicloud_cs_kubernetes_node_pool.k8s_pool
alicloud_cs_managed_kubernetes.k8s
alicloud_key_pair.deployer
alicloud_security_group.default
alicloud_vpc.vpc
alicloud_vswitch.vswitches[0]
alicloud_vswitch.vswitches[1]
alicloud_vswitch.vswitches[2]
kubernetes_cluster_role_binding.cluster_role_for_helm
kubernetes_namespace.external_secrets
kubernetes_secret.onepassword_connect_secret
kubernetes_secret.onepassword_connect_token_infrastructure
kubernetes_service_account.sa_for_helm
null_resource.aliyun
null_resource.default_storage
null_resource.kube_config

可以看出alicloud_cs_kubernetes_node_pool.default-nodepool 这个节点池被从阿里云导入到terraform了,此时去修改platform和image_id,通过terraform run后,我们可以看出,不会去修改其它的节点内容了。

======================以下是引用=================================

使用Terraform管理已创建的集群 - 容器服务 Kubernetes 版 ACK - 阿里云

Terraform支持导入和管理ACK的存量资源,例如集群、节点池等。本文介绍如何通过Terraform管理存量ACK托管版集群。

前提条件

  • 已创建ACK托管版集群,其中包含一个有两个节点的节点池。具体操作,请参见使用Terraform创建ACK托管版集群。
  • 已安装Terraform。

    说明

    请确认Terraform版本不低于v0.12.28,可通过terraform --version命令查看Terraform版本。

    • Cloud Shell默认安装配置了Terraform和阿里云账号信息,无需任何额外配置。

    • 如果您不使用Cloud Shell,关于安装Terraform的方式,请参见在本地安装和配置Terraform。

  • 配置阿里云账号信息。

    创建环境变量,用于存放身份认证信息。

    export ALICLOUD_ACCESS_KEY="************"   #替换为阿里云账号的AK信息。
    export ALICLOUD_SECRET_KEY="************"   #替换为阿里云账号的SK信息。
    export ALICLOUD_REGION="cn-beijing"         #替换为您集群所在的地域。

    说明

    为提高权限管理的灵活性和安全性,建议您创建名为Terraform的RAM用户,并为该RAM用户创建AccessKey和授权。具体操作,请参见创建RAM用户和为RAM用户授权。

操作步骤

  1. 创建一个工作目录,并在工作目录中创建名为main.tf的配置文件。
    provider "alicloud" {
    }
  2. 执行以下命令初始化Terraform运行环境。
    terraform init

    预期输出:

    Initializing the backend...Initializing provider plugins...
    - Checking for available provider plugins...
    - Downloading plugin for provider "alicloud" (hashicorp/alicloud) 1.90.1...
    ...You may now begin working with Terraform. Try running "terraform plan" to see
    any changes that are required for your infrastructure. All Terraform commands
    should now work.If you ever set or change modules or backend configuration for Terraform,
    rerun this command to reinitialize your working directory. If you forget, other
    commands will detect it and remind you to do so if necessary.
  3. 导入集群。
    1. 将集群的资源添加到main.tf文件中。
      # Kubernetes托管版。
      resource "alicloud_cs_managed_kubernetes" "default" {
      }
    2. 执行以下命令,导入集群。其中,<Cluster-ID>为待导入集群的ID。
      terraform import alicloud_cs_managed_kubernetes.default <Cluster-ID>

      预期输出:

      alicloud_cs_managed_kubernetes.default: Importing from ID "c338cf0f4496a4dc1936a9e314162****"...
      alicloud_cs_managed_kubernetes.default: Import complete!Imported alicloud_cs_managed_kubernetes
      alicloud_cs_managed_kubernetes.default: Refreshing state... [id=c338cf0f4496a4dc1936a9e314162****]Import successful!The resources that were imported are shown above. These resources are now in
      your Terraform state and will henceforth be managed by Terraform.

      此时,在terraform.tfstate文件中会显示如下导入的集群信息:

      {"mode": "managed","type": "alicloud_cs_managed_kubernetes","name": "default","provider": "provider.alicloud","instances": [{"mode": "managed","type": "alicloud_cs_managed_kubernetes","name": "default","provider": "provider.alicloud","instances": [........]}]}
    3. 根据terraform.tfstate文件的内容,补充main.tf的必填字段。
      provider "alicloud" {
      }# 专有网络。
      resource "alicloud_cs_managed_kubernetes" "default" {# 补充必填字段。worker_vswitch_ids = [.....]......
      }
    4. 执行以下命令查看本地资源和远端的差异。
      terraform plan

      预期输出:

      Refreshing Terraform state in-memory prior to plan...
      The refreshed state will be used to calculate this plan, but will not be
      persisted to local or remote state storage.alicloud_cs_managed_kubernetes.default: Refreshing state... [id=c338cf0f4496a4dc1936a9e314162****]------------------------------------------------------------------------No changes. Infrastructure is up-to-date.This means that Terraform did not detect any differences between your
      configuration and real physical resources that exist. As a result, no
      actions need to be performed.
  4. 导入节点池。
    1. 执行以下命令,导入节点池。其中,<Cluster-ID>为待导入集群的ID,此处为上一步中导入集群的ID,<Nodepool-ID>为待导入节点池的ID,两者通过半角冒号”:“分隔。
      terraform import alicloud_cs_kubernetes_node_pool.default <Cluster-ID>:<Nodepool-ID>

      预期输出:

      alicloud_cs_kubernetes_node_pool.default: Importing from ID "c338cf0f4496a4dc1936a9e314162****:np0f8f2193384045d4aa503c3d24ca****"...
      alicloud_cs_kubernetes_node_pool.default: Import complete!Imported alicloud_cs_kubernetes_node_pool
      alicloud_cs_kubernetes_node_pool.default: Refreshing state... [id=c338cf0f4496a4dc1936a9e314162****:np0f8f2193384045d4aa503c3d24ca****]Import successful!The resources that were imported are shown above. These resources are now in
      your Terraform state and will henceforth be managed by Terraform.

      此时,在terraform.tfstate文件中会显示如下导入的节点池信息:

      .....
      "resources": [{"mode": "managed","type": "alicloud_cs_kubernetes_node_pool","name": "default","provider": "provider.alicloud","instances": [.....]}]
    2. 根据terraform.tfstate文件的内容,补充main.tf的必填字段。
      provider "alicloud" {
      }# 节点池。
      resource "alicloud_cs_kubernetes_node_pool" "default" {# 节点池的名称。name           = ....# 节点池的实例类型。instance_types =  .........
      }
    3. 执行以下命令查看本地资源和远端的差异。
      terraform plan

      预期输出:

      Refreshing Terraform state in-memory prior to plan...
      The refreshed state will be used to calculate this plan, but will not be
      persisted to local or remote state storage.alicloud_cs_kubernetes_node_pool.default: Refreshing state... [id=c338cf0f4496a4dc1936a9e314162****:np0f8f2193384045d4aa503c3d24ca****]
      alicloud_cs_managed_kubernetes.default: Refreshing state... [id=c338cf0f4496a4dc1936a9e314162****]------------------------------------------------------------------------No changes. Infrastructure is up-to-date.This means that Terraform did not detect any differences between your
      configuration and real physical resources that exist. As a result, no
      actions need to be performed.

    集群导入完成后,您就可以通过main.tf文件对集群或节点池进行操作。

  5. 验证节点池的扩容操作。
    1. 通过main.tf验证节点池的扩容操作。比如给刚导入的节点池扩容1个节点,需要将main.tf文件修改为:
      ......# Kubernetes托管版。
      resource "alicloud_cs_kubernetes_node_pool" "default" {.....# 节点池期望节点数为3。desired_size = 3
      }.....
    2. 执行以下命令,完成创建操作。
      terraform apply

      预期输出:

      alicloud_cs_kubernetes_node_pool.default: Refreshing state... [id=c338cf0f4496a4dc1936a9e314162****:np0f8f2193384045d4aa503c3d24ca****]An execution plan has been generated and is shown below.
      Resource actions are indicated with the following symbols:~ update in-placeTerraform will perform the following actions:# alicloud_cs_kubernetes_node_pool.default will be updated in-place~ resource "alicloud_cs_kubernetes_node_pool" "default" {.....~ desired_size               = 2 -> 3.....}Plan: 0 to add, 1 to change, 0 to destroy.

      提示是否执行变更,输入yes,等待变更结束

    3. .....
      alicloud_cs_kubernetes_node_pool.default: Still modifying... [id=c338cf0f4496a4dc1936a9e314162****:np0f8f2193384045d4aa503c3d24ca****, 2m30s elapsed]
      alicloud_cs_kubernetes_node_pool.default: Still modifying... [id=c338cf0f4496a4dc1936a9e314162****:np0f8f2193384045d4aa503c3d24ca****, 2m40s elapsed]
      alicloud_cs_kubernetes_node_pool.default: Still modifying... [id=c338cf0f4496a4dc1936a9e314162****:np0f8f2193384045d4aa503c3d24ca****, 2m50s elapsed]
      alicloud_cs_kubernetes_node_pool.default: Modifications complete after 2m53s [id=c338cf0f4496a4dc1936a9e314162****:np0f8f2193384045d4aa503c3d24ca****]Apply complete! Resources: 0 added, 1 changed, 0 destroyed.

相关文章:

使用Terraform管理已经存在的kubernates和默认的节点池

背景&#xff1a; 通过terraform resource "alicloud_cs_managed_kubernetes" "k8s" {...}创建集群时&#xff0c;会产生一个默认的节点池default-nodepool&#xff0c;但是如何去修改这个默认节点池的信息呢&#xff1f; 解决思路&#xff1a; 因为Ter…...

在HTML当中引入Vue控件,以element-ui为例

前情&#xff1a;需要实现一个同时满足按天、按周、按月选择的时间选择器&#xff0c;但是以HTML为基础写的都不太满足我的要求&#xff0c;要么只能按天选择&#xff0c;要么就是想选择久远的时间得点很久&#xff0c;除非自己写捷径&#xff0c;所以就看上了element-ui的这个…...

UE5实现相机水平矫正

UE5实现相机水平矫正 思路&#xff0c;用HIT获得基于相机视角的 离散采样点&#xff0c;然后根据距离相机距离进行权重分析。 距离越近&#xff0c;采样约中心&#xff0c;即越接近人眼注意点&#xff0c;最后算出加权平均高度&#xff0c;赋予给相机&#xff0c;相机将水平旋…...

Word插入Latex语句并编译为数学公式

WPS不可行&#xff0c;正版word可以&#xff08;垃圾WPS&#xff09; 选中Latex语句并按下Alt &#xff08;此处以后补一张图&#xff09; 该方法不需要额外安装什么插件哦&#xff01;...

Google Play PolicyBytes 政策更新中文视频 | 2023 年 10 月

Google Play 持续帮助开发者开启成功出海之旅&#xff0c;为用户提供安全优质的应用。也感谢大家与我们携手合作&#xff0c;继续努力将 Google Play 打造为一个安全可信赖的平台。欢迎您观看 Google Play PolicyBytes 中文视频了解 2023 年 10 月政策更新内容&#xff0c;更及…...

pytorch-fastrcnn识别王者荣耀敌方英雄血条

文章目录 前言效果如下实现训练数据获得训练数据和测试数据yaml文件训练py画框文件的修改py测试py升级 前言 最近看王者荣耀视频看到了一个别人提供的一个百里自动设计解决方案,使用一个外设放在百里的二技能上,然后拖动外设在屏幕上滑动,当外设检测到有敌方英雄时外设自动松开…...

阿里云推出通义千问App,提供全方位的协助

&#x1f989; AI新闻 &#x1f680; 阿里云推出通义千问App&#xff0c;提供全方位的协助 摘要&#xff1a;阿里云旗下大模型通义千问App登陆各大安卓应用市场&#xff0c;具有超大规模预训练模型&#xff0c;可在创意文案、办公助理、学习助手、趣味生活等方面协助用户。功…...

深入解析 Spring Framework 中 @Autowired 注解的实现原理

关于Autowired注解的作用 Autowired 注解在Spring中的作用是实现依赖注入&#xff08;Dependency Injection&#xff09;&#xff0c;它用于自动装配&#xff08;autowiring&#xff09;Spring Bean 的依赖关系。具体来说&#xff0c; Autowired 注解有以下作用&#xff1a; …...

电脑数据文件恢复工具easyrecovery14中文版

当不小心将回收站的文件删除了怎么办&#xff1f;想找回但是不知道怎么找回需要的数据文件&#xff1f;别担心今天小编就为大家介绍一款非常专业的电脑数据文件恢复工具&#xff0c;easyrecovery14是由Ontrack专为电脑用户推出的一款专业的数据恢复软件&#xff0c;这款软件功能…...

Android NDK开发详解之Application.mk探秘

Android NDK开发详解之Application.mk探秘 概览变量APP_ASFLAGSAPP_ASMFLAGSAPP_BUILD_SCRIPTAPP_CFLAGSAPP_CLANG_TIDYAPP_CLANG_TIDY_FLAGSAPP_CONLYFLAGSAPP_CPPFLAGSAPP_CXXFLAGSAPP_DEBUGAPP_LDFLAGSAPP_MANIFESTAPP_MODULESAPP_OPTIMAPP_PLATFORMAPP_PROJECT_PATHAPP_STL…...

(草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。

子窗口向主窗口发射信号。 只需要插入两行代码 class CodeSettingWindow(Ui_CodeSetting, QMainWindow):_signal pyqtSignal(int, int, int) # 这个信号要放在class之下&#xff0c;———init————函数上def __init__(self):# self.Win_X, self.Win_Y, self.CodeNum表示…...

Golang Web3钱包开发指南

简介 以太坊&#xff08;Ethereum&#xff09;是目前最受欢迎的区块链平台之一&#xff0c;它提供了智能合约功能和去中心化应用&#xff08;DApps&#xff09;的开发能力。在以太坊生态系统中&#xff0c;Web3钱包扮演着关键角色&#xff0c;允许用户管理账户和密钥、发送交易…...

Vue使用 IndexDB vue操作IndexDB数据库 Vue操作IndexDB数据库

Vue使用 IndexDB vue操作IndexDB数据库 Vue操作IndexDB数据库 Vue使用 IndexDB vue操作IndexDB数据库 Vue操作IndexDB数据库安装 IndexDB类库引入 localForage测试 新增数据、获取数据 Vue使用 IndexDB vue操作IndexDB数据库 Vue操作IndexDB数据库 大部分场景使用 LocalStore都…...

CentOS 安装 Hadoop Local (Standalone) Mode 单机模式

CentOS 安装 Hadoop Local (Standalone) Mode 单机模式 Hadoop Local (Standalone) Mode 单机模式 1. 修改yum源 并升级内核和软件 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repoyum clean allyum makecacheyum -y update2. 安…...

jenkins工具系列 —— 删除Jenkins JOB后清理workspace

文章目录 问题现象分析解决思路脚本实现问题现象分析 Jenkins使用过程中,占用空间最大的两个位置: 1 、workspace: 工作空间,可以随便删除,删除后再次构建时间可能会比较长,因为要重新获取一些资源。 2 、job: 存放的是项目的配置、构建结果、日志等。不建议手动删除,…...

超越人眼,好用的OCR软件推荐

OCR技术&#xff08;Optical Character Recognition&#xff09;是一种将图像或扫描的文字转化为可编辑、搜索、存储、分享的文本的技术。OCR技术除了能够将纸质文档数字化&#xff0c;还可以将手写文本、印刷文本、数码照片中的文字等转化为电子文本。 以下是几个比较知名的O…...

Go语言开发网站

引言 随着互联网的迅速发展&#xff0c;网站已经成为人们获取各种信息和服务的主要途径。而开发一个高性能、可扩展的网站是一项挑战。Go语言作为一门现代化的编程语言&#xff0c;具有强大的并发能力和高效的性能&#xff0c;逐渐成为网站开发的首选语言之一。本文将介绍如何…...

第18章_MySQL8其它新特性

第18章_MySQL8其它新特性 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 1. MySQL8新特性概述 MySQL从5.7版本直接跳跃发布了8.0版本&#xff0c;可见这是一个令人兴奋的里程碑版本。MySQL 8版…...

Python爬虫实战(六)——使用代理IP批量下载高清小姐姐图片(附上完整源码)

文章目录 一、爬取目标二、实现效果三、准备工作四、代理IP4.1 代理IP是什么&#xff1f;4.2 代理IP的好处&#xff1f;4.3 获取代理IP4.4 Python获取代理IP 五、代理实战5.1 导入模块5.2 设置翻页5.3 获取图片链接5.4 下载图片5.5 调用主函数5.6 完整源码5.7 免费代理不够用怎…...

【操作系统】考研真题攻克与重点知识点剖析 - 第 1 篇:操作系统概述

前言 本文基础知识部分来自于b站&#xff1a;分享笔记的好人儿的思维导图与王道考研课程&#xff0c;感谢大佬的开源精神&#xff0c;习题来自老师划的重点以及考研真题。此前我尝试了完全使用Python或是结合大语言模型对考研真题进行数据清洗与可视化分析&#xff0c;本人技术…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

WEB3全栈开发——面试专业技能点P4数据库

一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库&#xff0c;基于 mysql 库改进而来&#xff0c;具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点&#xff1a; 支持 Promise / async-await&#xf…...

Django RBAC项目后端实战 - 03 DRF权限控制实现

项目背景 在上一篇文章中&#xff0c;我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统&#xff0c;为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…...