使用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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/123496.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二叉搜索树 和 哈希表 (JAVA)

目录 二叉搜索树 二叉搜索树的插入 二叉搜索树的查找 二叉搜索树的删除 哈希表 哈希冲突 闭散列 线性探测法 二次探测法 开散列 开散列代码实现&#xff1a; 插入元素 删除元素 查找元素 二叉搜索树 先了解以下二叉搜索树是啥&#xff0c;概念如下&#xff1a…

光强的检测与控制系统设计

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、实习内容二、实习方法2.1 proteus仿真部分2.2 使用Altium designer软件绘制原理图2.2.1 工程创建2.2.2 绘制封装以及链接封装与原件原理图2.2.3检查原件原理…

【深入浅出】寄存器精讲第一期

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;数据结构、算法模板、汇编语言 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. ⛳️开篇1.1 &#x1f514;CPU 概述&#xff08;简单了解&#xff09…

分布式消息队列:RabbitMQ(1)

目录 一:中间件 二:分布式消息队列 2.1:是消息队列 2.1.1:消息队列的优势 2.1.1.1:异步处理化 2.1.1.2:削峰填谷 2.2:分布式消息队列 2.2.1:分布式消息队列的优势 2.2.1.1:数据的持久化 2.2.1.2:可扩展性 2.2.1.3:应用解耦 2.2.1.4:发送订阅 2.2.2:分布式消息队列…

mathtype7.4破解永久激活码

MathType(数学公式编辑器)是由Design Science公司研发的一款专业的数学公式编辑工具。MathType功能非常强大&#xff0c;尤其适用于专门研究数学领域的人群使用。使用MathType让你在输入数学公式的时候能够更加的得心应手&#xff0c;各种复杂的运算符号也不在话下。 MathType最…

SpringBoot小项目——简单的小区物业后台管理系统 认证鉴权 用户-角色模型 AOP切面日志 全局异常【源码】

目录 引出一、应用到的技术栈Spring、Spring MVC、Spring Boot基础SpringBoot进阶、SpringMVC原理、AOP切面MyBatis 数据库相关JavaWeb基础&#xff1a;Session等前端Vue、JavaScript、Bootstrap 二、后台管理系统的功能登录功能1.用户名密码登录2.验证码的登录 报修业务的处理…

贝叶斯变分方法:初学者指南--平均场近似

Eric Jang: A Beginners Guide to Variational Methods: Mean-Field Approximation (evjang.com) 一、说明 变分贝叶斯 (VB) 方法是统计机器学习中非常流行的一系列技术。VB 方法允许我们将 统计推断 问题&#xff08;即&#xff0c;给定另一个随机变量的值来推断随机变量的值&…

服务熔断保护实践--Hystrix

概述 微服务有很多互相调用的服务&#xff0c;构成一系列的调用链路&#xff0c;如果调用链路中某个服务失效或者网络堵塞等问题&#xff0c;而有较多请求都需要调用有问题的服务时&#xff0c;这是就会造成多个服务的大面积失效&#xff0c;造成服务“雪崩”效应。 服务“雪…

【C语言】优化通讯录管理系统

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家优化上一篇的通讯录&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 一. 前言二. 动态通讯录2.1 通讯录结构体2.2 初始化通讯录2.3 增加联系人2.4 销毁通讯…

Redis原理-IO模型和持久化

高性能IO模型 为什么单线程Redis能那么快 一方面&#xff0c;Redis 的大部分操作在内存上完成&#xff0c;再加上它采用了高效的数据结构&#xff0c;例如哈希表和跳表&#xff0c;这是它实现高性能的一个重要原因。另一方面&#xff0c;就是 Redis 采用了多路复用机制&#…

HTML简单实现v-if与v-for与v-model

Vue启动&#xff01;&#xff01; 首先VIewModel将View和Model连接一起&#xff0c;Model的数据改变View的数据也变 使用Visual Studio Code 启动Vue需要vue.js插件和导入CDN(包) vue.js插件&#xff1a;CTRL shift x 在搜索栏搜 索vue.js安装即可 CDN&#xff1a; http…

orb-slam3编译手册(Ubuntu20.04)

orb-slam3编译手册&#xff08;Ubuntu20.04&#xff09; 一、环境要求1.安装git2.安装g3.安装CMake4.安装vi编辑器 二、源代码下载三、依赖库下载1.Eigen安装2.Pangolin安装3.opencv安装4.安装Python & libssl-dev5.安装boost库 三、安装orb-slam3四、数据集下载及测试 写在…

k8s集群升级

目录 1. 部署cri-docker &#xff08;所有集群节点&#xff09; 2. 升级master节点 3. 升级worker节点 4. 部署containerd 1. 部署cri-docker &#xff08;所有集群节点&#xff09; k8s从1.24版本开始移除了dockershim&#xff0c;所以需要安装cri-docker插件才能使用docker …

MySQL6:索引使用原则,联合索引,联合主键/复合主键,覆盖索引、什么是回表?索引条件下推,索引的创建与使用,索引的创建与使用,索引失效

MySQL6&#xff1a;索引使用原则&#xff0c;联合索引&#xff0c;联合主键/复合主键&#xff0c;覆盖索引、什么是回表&#xff1f;索引条件下推&#xff0c;索引的创建与使用&#xff0c;索引的创建与使用&#xff0c;索引失效 索引使用原则列的离散(sdn)度 联合索引创建联合…

Harbor私有镜像仓库搭建

本文基于&#xff1a;https://zhuanlan.zhihu.com/p/143779176 1.环境准备 IP&#xff1a;192.168.10.136/24 操作系统:centos7 2.安装Docker、Docker-compose 2.1安装Docker-CE $ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.re…

数据库简史:多主数据库架构的由来和华为参天引擎的机遇

注&#xff1a;本文发表后&#xff0c;收到了很多后台反馈&#xff0c;其中关于大型机的早期成就不容省略。微调重发本文&#xff0c;纯属个人观点&#xff0c;错谬之处&#xff0c;仍然期待指正。 2023年10月13日&#xff0c;在北京举办的“2023金融业数据库技术大会"上&…

redis6.0源码分析:跳表skiplist

文章目录 前言什么是跳表跳表&#xff08;redis实现&#xff09;的空间复杂度相关定义 跳表&#xff08;redis实现&#xff09;相关操作创建跳表插入节点查找节点删除节点 前言 太长不看版 跳跃表是有序集合zset的底层实现之一&#xff0c; 除此之外它在 Redis 中没有其他应用。…

电力巡检/电力抢修行业解决方案:AI+视频技术助力解决巡检监管难题

一、行业背景 随着国民经济的蓬勃发展&#xff0c;工业用电和居民用电需求迅速增加&#xff0c;电厂、变电站、输电线路高负荷运转&#xff0c;一旦某个节点发生故障&#xff0c;对生产、生活造成巨大的影响。目前电力行业生产现场人员、设备较多&#xff0c;而生产监督员有限…

基于vue小红书平台用户数据分析与可视化

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

【马蹄集】—— 搜索专题

搜索专题 目录 MT2238 数的增殖MT2239 二维矩阵中的最长下降序列MT2240 传染病MT2241 循环空间BD202303 第五维度 MT2238 数的增殖 难度&#xff1a;黄金    时间限制&#xff1a;1秒    占用内存&#xff1a;128M 题目描述 给定一个数 n ( n < 1000 ) n (n<1000) n…