Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Packer构建自定义镜像如何使用ssh密钥

Packer构建自定义镜像如何使用ssh密钥

原创
作者头像
arunma
发布于 2024-12-13 12:26:27
发布于 2024-12-13 12:26:27
2220
举报

本文将介绍如何使用 Packer 构建自定义镜像,并通过 SSH 密钥进行连接。此外,我们还将确保创建的自定义镜像实例同样支持 SSH 密钥连接。


1、packer安装及使用 https://cloud.tencent.com/document/product/213/4942https://www.packer.io/

2、申请ssh密钥https://console.cloud.tencent.com/cvm/sshkey/index?rid=1&pid=-1

  • 注意:创建ssh密钥后会自动下载私钥,保存好私钥

3、定义支持ssh密钥的packer模版,设置aksk

代码语言:json
AI代码解释
复制
{
  "variables": {
    "secret_id": "{{env `TENCENTCLOUD_SECRET_ID`}}",
    "secret_key": "{{env `TENCENTCLOUD_SECRET_KEY`}}",
    "version": "v1.0.0"
  },
  "builders": [
    {
      "type": "tencentcloud-cvm",
      "secret_id": "{{user `secret_id`}}",
      "secret_key": "{{user `secret_key`}}",
      "region": "ap-guangzhou",
      "zone": "ap-guangzhou-6",
      "instance_type": "SA3.MEDIUM2",
      "source_image_id": "img-9xqekomx",
      "ssh_username": "root",
      "ssh_keypair_name": "skey-atjkudf9",
      "ssh_private_key_file": "/root/tf-test/packer/cvm_test.pem",
      "image_name": "Packer-test-{{user `version`}}",
      "disk_type": "CLOUD_PREMIUM",
      "packer_debug": true,
      "associate_public_ip_address": true,
      "run_tags": {
        "packer": "packer-test"
      }
    }
  ],
  "provisioners": [
    {
      "type": "shell",
      "inline": [
        "pwd"
      ]
    }
  ]
}

字段说明:

ssh_username:密钥id(来自第二步创建)

ssh_private_key_file:私钥文件地址(来自第二步创建后自动下载)

4、构建镜像

代码语言:shell
AI代码解释
复制
packer build xxx.json

5、构建过程

代码语言:shell
AI代码解释
复制
tencentcloud-cvm: output will be in this color.

==> tencentcloud-cvm: Trying to check image name: Packer-test-v1.0.0...
    tencentcloud-cvm: Image name: useable
==> tencentcloud-cvm: Trying to check source image: img-9xqekomx...
    tencentcloud-cvm: Image found: CentOS Stream 9 64bit
==> tencentcloud-cvm: Using existing SSH private key
    tencentcloud-cvm: Loaded 1678 bytes private key data
==> tencentcloud-cvm: Trying to create a new vpc...
    tencentcloud-cvm: Vpc created: vpc-r2607xcf
==> tencentcloud-cvm: Trying to create a new subnet...
    tencentcloud-cvm: Subnet created: subnet-dv6xl1f6
==> tencentcloud-cvm: Trying to create a new securitygroup...
    tencentcloud-cvm: Securitygroup created: sg-ac3t25fx
==> tencentcloud-cvm: Trying to create securitygroup polices...
    tencentcloud-cvm: Securitygroup polices created
==> tencentcloud-cvm: Trying to create a new instance...
    tencentcloud-cvm: RunInstances reqeust: skey-atjkudf9
    tencentcloud-cvm: Waiting for instance ready
    tencentcloud-cvm: Instance created: ins-rce7y5la
==> tencentcloud-cvm: Using SSH communicator to connect: 81.71.64.81
==> tencentcloud-cvm: Waiting for SSH to become available...
==> tencentcloud-cvm: Connected to SSH!
==> tencentcloud-cvm: Provisioning with shell script: /tmp/packer-shell2694718859
    tencentcloud-cvm: /root
==> tencentcloud-cvm: Trying to create a new image: Packer-test-v1.0.0...
    tencentcloud-cvm: Waiting for image ready
    tencentcloud-cvm: Image created: img-lblj0aea
==> tencentcloud-cvm: Cleaning up instance...
==> tencentcloud-cvm: Cleaning up securitygroup...
==> tencentcloud-cvm: Cleaning up subnet...
==> tencentcloud-cvm: Cleaning up vpc...
Build 'tencentcloud-cvm' finished after 3 minutes 11 seconds.

==> Wait completed after 3 minutes 11 seconds

==> Builds finished. The artifacts of successful builds are:
--> tencentcloud-cvm: Tencentcloud images(ap-guangzhou: img-lblj0aea) were created.

6、选用自定义镜像创建的cvm包含公钥

7、使用私钥登录,实例创建完成后点击登录

验证公钥可以登录后在~/.ssh路径查看

如有疑问联系作者或者packer插件开发者 https://github.com/hashicorp/packer-plugin-tencentcloud

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【K8S专栏】Kubernetes数据持久化管理
Kubernetes为了能更好的支持有状态应用的数据存储问题,除了基本的HostPath和EmptyDir提供的数据持久化方案之外,还提供了PV,PVC和StorageClass资源对象来对存储进行管理。
没有故事的陈师傅
2022/09/15
1.2K0
K8S学习笔记之Kubernetes数据持久化方案
在开始介绍k8s持久化存储前,我们有必要了解一下k8s的emptydir和hostpath、configmap以及secret的机制和用途。
Jetpropelledsnake21
2019/03/22
1.9K0
K8S学习笔记之Kubernetes数据持久化方案
k8s实践(七):存储卷和数据持久化(Volumes and Persistent Storage)
  Kubernetes的卷是pod的一个组成部分,因此像容器一样在pod的规范中就定义了。它们不是独立的Kubernetes对象,也不能单独创建或删除。pod中的所有容器都可以使用卷,但必须先将它挂载在每个需要访问它的容器中。在每个容器中,都可以在其文件系统的任意位置挂载卷。
loong576
2019/09/10
6.5K0
k8s实践(七):存储卷和数据持久化(Volumes and Persistent Storage)
K8s——MySQL实现数据持久化
5、创建pod+svc(service) 这个pod是提供的MySQL服务,并将其映射到宿主机,可以做和client端通信
小手冰凉
2020/09/11
2K0
k8s——针对有状态服务实现数据持久化
对服务器程序来说,究竟是有状态服务,还是无状态服务,其判断依旧是指两个来自相同发起者的请求在服务器端是否具备上下文关系。如果是状态化请求,那么服务器端一般都要保存请求的相关信息,每个请求可以默认地使用以前的请求信息。而对于无状态请求,服务器端所能够处理的过程必须全部来自于请求所携带的信息,以及其他服务器端自身所保存的、并且可以被所有请求所使用的公共信息。 无状态的服务器程序,最著名的就是WEB服务器。每次HTTP请求和以前都没有什么关系,只是获取目标URI。得到目标内容之后,这次连接就被杀死,没有任何痕迹。在后来的发展进程中,逐渐在无状态化的过程中,加入状态化的信息,比如COOKIE。服务端在响应客户端的请求的时候,会向客户端推送一个COOKIE,这个COOKIE记录服务端上面的一些信息。客户端在后续的请求中,可以携带这个COOKIE,服务端可以根据这个COOKIE判断这个请求的上下文关系。COOKIE的存在,是无状态化向状态化的一个过渡手段,他通过外部扩展手段,COOKIE来维护上下文关系。 状态化的服务器有更广阔的应用范围,比如MSN、网络游戏等服务器。他在服务端维护每个连接的状态信息,服务端在接收到每个连接的发送的请求时,可以从本地存储的信息来重现上下文关系。这样,客户端可以很容易使用缺省的信息,服务端也可以很容易地进行状态管理。比如说,当一个用户登录后,服务端可以根据用户名获取他的生日等先前的注册信息;而且在后续的处理中,服务端也很容易找到这个用户的历史信息。 状态化服务器在功能实现方面具有更加强大的优势,但由于他需要维护大量的信息和状态,在性能方面要稍逊于无状态服务器。无状态服务器在处理简单服务方面有优势,但复杂功能方面有很多弊端,比如,用无状态服务器来实现即时通讯服务器,将会是场恶梦。
小手冰凉
2020/09/15
2.3K0
k8s 存储卷之简单存储
EmptyDir是最基础的Volume类型,一个EmptyDir就是Host上的一个空目录。
看、未来
2022/08/11
7420
k8s 存储卷之简单存储
ASP.NET Core on K8S深入学习(8)数据管理
在Docker中我们知道,要想实现数据的持久化(所谓Docker的数据持久化即数据不随着Container的结束而结束),需要将数据从宿主机挂载到容器中,常用的手段就是Volume数据卷。在K8S中,也提供了存储模型Volume,支持我们将应用中的数据持久化存储到容器中。
Edison Zhou
2019/09/04
7510
ASP.NET Core on K8S深入学习(8)数据管理
k8s(5)-kubernetes存储系统Volume和PV
K8S的存储系统从基础到高级又大致分为三个层次:普通Volume,Persistent Volume 和动态存储供应。
黄规速
2023/03/06
1.6K0
k8s(5)-kubernetes存储系统Volume和PV
Kubernetes数据持久化方案
在开始介绍k8s持久化存储前,我们有必要了解一下k8s的emptydir和hostpath、configmap以及secret的机制和用途。
星哥玩云
2022/07/13
9130
Kubernetes数据持久化方案
《后端学运维》- k8s之数据存储
k8s 的进程到这里我们已经完成了 Namespace、Pod、PodController 几种资源的使用方式,已经过大半了哦~这篇文章我们就继续来了解一下在k8s 中怎么进行数据存储!
蔡不菜丶
2021/06/29
8620
k8s系列(4)-MongoDB数据持久化
kubernetes 集群不会为你处理数据的存储,我们可以为数据库挂载一个磁盘来确保数据的安全。
爽朗地狮子
2022/10/20
1.3K0
k8s 实践经验(十)存储卷
EmptyDir是最基础的Volume类型,一个EmptyDir就是Host上的一个空目录。
看、未来
2022/05/11
5450
k8s 实践经验(十)存储卷
K8s——数据持久化自动创建PV
实现k8s的数据持久化的流程为:搭建nfs底层存储---->创建PV---->创建PVC---->创建pod。最终pod中的container实现数据的持久化。
小手冰凉
2020/09/11
2.4K0
k8s(十)基本存储[通俗易懂]
在前面已经提到,容器的生命周期可能很短,会被频繁的创建和销毁。那么容器在销毁的时候,保存在容器中的数据也会被清除。这种结果对用户来说,在某些情况下是不乐意看到的。为了持久化保存容器中的数据,kubernetes引入了Volume的概念。 Volume是Pod中能够被多个容器访问的共享目录,它被定义在Pod上,然后被一个Pod里面的多个容器挂载到具体的文件目录下,kubernetes通过Volume实现同一个Pod中不同容器之间的数据共享以及数据的持久化存储。Volume的生命周期不和Pod中的单个容器的生命周期有关,当容器终止或者重启的时候,Volume中的数据也不会丢失。
全栈程序员站长
2022/09/22
6460
k8s(十)基本存储[通俗易懂]
kubernetes—数据存储
在前面已经提到,容器的生命周期可能很短,会被频繁地创建和销毁。那么容器在销毁时,保存在容器中的数据也会被清除。这种结果对用户来说,在某些情况下是不乐意看到的。为了持久化保存容器的数据,kubernetes引入了Volume的概念。
Alone-林
2023/03/17
2.8K0
kubernetes—数据存储
Kubernetes使用GlusterFS实现数据持久化
k8s中部署有状态应用等需要持久化数据的应用,必不可少得用存储,k8s支持很多中存储方案,我司目前使用的存储有glusterfs(分为容器化和裸机方式)、nfs供应用选用,本次就简单实战下glusterfs配合k8s做数据存储。
程序员同行者
2019/05/14
8420
Kubernetes(k8s)-PV&PVC介绍
我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。
运维小路
2025/01/17
1820
Kubernetes(k8s)-PV&PVC介绍
k8s安装mysql进阶版
# MySQL实现数据持久化 # 1.搭建nfs存储 这里选择node2搭建nfs储存服务 [root@node2 ~]# yum -y install nfs-utils [root@node2 ~]# mkdir /nfsdata/mysql -p [root@node2 ~]# vim /etc/exports [root@node2 ~]# cat /etc/exports /nfsdata *(rw,sync,no_root_squash) [root@node2 ~]# systemctl re
summerking
2022/10/27
2880
Kubernetes运维-持久化存储卷实践与管理
PV 的全称是:PersistentVolume(持久化卷),是对底层共享存储的一种抽象,PV 由管理员进行创建和配置,是一个全局资源,包含存储的类型,存储的大小和访问模式等。它和具体的底层的共享存储技术的实现方式有关,比如 Ceph、GlusterFS、NFS、hostPath 等,都是通过插件机制完成与共享存储的对接。
王先森sec
2024/04/20
5380
Kubernetes运维-持久化存储卷实践与管理
kubernetes(十一) 存储& statefulset控制器
kubernetes支持持久卷的存储插件: https://kubernetes.io/docs/concepts/storage/persistent-volumes/
alexhuiwang
2020/09/23
8100
kubernetes(十一) 存储& statefulset控制器
推荐阅读
相关推荐
【K8S专栏】Kubernetes数据持久化管理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档