对于 Linux 镜像,cloud-init 负责 instance 的初始化工作。cloud-init 功能很强大,能做很多事情,而且我们可以通过修改配置文件灵活定制 cloud-init。

cloud-init 的配置文件为 /etc/cloud/cloud.cfg,这里举几个应用场景:

1. 如果希望 root 能够直接登录 instance(默认不允许 root 登录),设置:

disable_root: 

2. 如果希望能以 ssh passwod 方式登录(默认只能通过 private key 登录),设置:

ssh_pwauth: 

3. 如果希望能够修改 instance 的 hostname(默认 instance 每次重启后 cloud-init 都会重新将 hostname 恢复成初始值),将cloud_init_modules 列表中下面两项删除或注释掉:

- set_hostname
- update_hostname

instance 每次启动 cloud-init 都会执行初始化工作,如果希望改变所有 instance 的初始化行为,则修改镜像的 /etc/cloud/cloud.cfg 文件;如果只想改变某个 instance 的初始化行为,直接修改 instance 的 /etc/cloud/cloud.cfg。

 
Set Passwords:
 
例子1:

chpasswd:
list: |
user1:password1
user2:password2
user3:RANDOM
expire: False
 

例子2:

 #cloud-config

chpasswd:

   list: |

       root:

       ubuntu:

   expire: false

如果指定expire, 并且设置为 false, 则将密码全局配置键用作所有用户帐户的密码。如果指定了expire并将其设置为 true, 则用户密码将过期, 从而防止使用默认的系统密码。

如果提供了list键, 则可以指定username:password列表。指定的用户名必须已存在于系统中, 或者已使用 cc_users_groups 模块创建

密码可以使用username:RANDOM 或者 username:R生成

如果提供了RAMDOM或者R选项的话密码会被设置为自动生成的字符串.这个密码可以在console-log(nova console-log )或者在/var/log/cloudinit-output.log中查看.

注意:cloud-init 只有第一次启动的时候会修改密码,也就是说第一次安装cloud-init,然后配置/etc/cloud/cloud.cfg,关机清理信息。再开机会强行修改密码。

接着再开机不会强行修改密码,即使删除cloud-init再重装配置也不行。

下面是cloud.cfg的一个例子:

users:
- default disable_root:
ssh_pwauth: locale_configfile: /etc/sysconfig/i18n
mount_default_fields: [~, ~, 'auto', 'defaults,nofail', '', '']
resize_rootfs_tmp: /dev
ssh_deletekeys:
ssh_genkeytypes: ~
syslog_fix_perms: ~ cloud_init_modules:
- migrator
- bootcmd
- write-files
- growpart
- resizefs
- set_hostname
- update_hostname
- update_etc_hosts
- rsyslog
- users-groups
- ssh cloud_config_modules:
- mounts
- locale
- set-passwords
- yum-add-repo
- package-update-upgrade-install
- timezone
- puppet
- chef
- salt-minion
- mcollective
- disable-ec2-metadata
- runcmd cloud_final_modules:
- rightscale_userdata
- scripts-per-once
- scripts-per-boot
- scripts-per-instance
- scripts-user
- ssh-authkey-fingerprints
- keys-to-console
- phone-home
- final-message system_info:
default_user:
name: root
lock_passwd: true
gecos: Cloud User
groups: [wheel, adm]
sudo: ["ALL=(ALL) NOPASSWD:ALL"]
shell: /bin/bash
distro: rhel
paths:
cloud_dir: /var/lib/cloud
templates_dir: /etc/cloud/templates
ssh_svcname: sshd # vim:syntax=yaml
chpasswd:
list: |
root:123456
expire: true

注意:

.如果镜像没有设置cloud_init,即使在计算节点的 /etc/nova/nova.conf 中配置 force_config_drive = true,也不会调用元数据信息
2.如果镜像设置了cloud_init,在计算节点的 /etc/nova/nova.conf 中没有配置 force_config_drive = true,依然会调用元数据信息,
而此时因为不知道怎么去调,所以会有一些报错信息,这样会导致开机比较久,而且每次开机都会读取元数据信息

提醒和解决方法:

如果之前的镜像是没有安装cloud-init,这时会有这种情况出现:
1.在/etc/nova/nova.conf中没有配置force_config_drive = true的计算节点中的机器,任何操作都是正常的;
即使在计算节点的 /etc/nova/nova.conf 中配置 force_config_drive = true,也不会调用元数据信息 2.这时通过rbd ls vms查看的所有虚拟机是这样子的:
4ff497bd-cd3c-4b8e-a607-40b08ba90ce1_disk 但是如果之后的镜像安装了cloud-init,则会出现这种情况:
1.在/etc/nova/nova.conf中配置了force_config_drive = true,那么之前用没有安装cloud-init的镜像安装的这些虚拟机
一旦重启就会变成ERROR 或者NOSTATE状态。
原因:
这时通过rbd ls vms查看的所有虚拟机是这样子的
4ff497bd-cd3c-4b8e-a607-40b08ba90ce1_disk
4ff497bd-cd3c-4b8e-a607-40b08ba90ce1_disk_config
并且读取的是4ff497bd-cd3c-4b8e-a607-40b08ba90ce1_disk_config文件

2.如果镜像设置了cloud_init,在计算节点的 /etc/nova/nova.conf 中没有配置 force_config_drive = true,依然会调用元数据信息,
而此时因为不知道怎么去调,所以会有一些报错信息,这样会导致开机比较久,而且每次开机都会读取元数据信息 解决:
1.修改数据库,然后关闭虚拟机再开机 推荐:
1.如果之前/etc/nova/nova.conf没有force_config_drive = true选项,则建议不要安装cloud_init;否则会出现各种奇怪的问题 有朋友说:突然多出的4ff497bd-cd3c-4b8e-a607-40b08ba90ce1_disk_config文件是因为迁移导致的,可能跟force_config_drive无关;
但是没有实验证明。

参考:http://www.cnblogs.com/CloudMan6/p/6431771.html

https://www.2cto.com/net/201708/667502.html

cloud-init使用技巧的更多相关文章

  1. openstack cloud init set password

    设置代理和password #!/bin/bash cd /home/ubuntu wget otcloud-gateway.bj.intel.com/script.tar.gz ]; then cu ...

  2. openstack 使用cloud init 和 console-log, nbd或者libguestfs 获取VM中的硬件信息。

    以获取PCI的信息为例. 基本代码: pci.py import base64 import guestfs from functools import partial import os impor ...

  3. 微信小程序开发技巧总结(二) -- 文件的选取、移动、上传和下载

    微信小程序开发技巧总结(二) -- 文件的选取.移动.上传和下载 1.不同类型文件的选取 1.1 常用的图片 视频 对于大部分开发者来说,需要上传的文件形式主要为图片,微信为此提供了接口. wx.ch ...

  4. 微信小程序调用云函数出错 Error: errCode: -404011 cloud function execution error | errMsg: cloud.callFunction:fail cloud function service error code -501005, error message Environment not found;

    错误异常: Error: errCode: -404011 cloud function execution error | errMsg: cloud.callFunction:fail cloud ...

  5. 小程序开发技巧(三)-- 云开发时效数据刷新和存储 (access_token等)

    小程序云开发时效数据刷新和存储 (access_token等) 1.问题描述 小程序中经常有需要进行OCR识别,或者使用外部api例如百度AI识别等接口,请求调用这些接口需要令牌,即一些具有时效性的数 ...

  6. 微信小程序云开发如何上手

    简要介绍 微信小程序云开发,是基于 Serverless 的一站式后端云服务,涵盖函数.数据库.存储.CDN等服务,免后端运维.基于云开发可以免鉴权调用微信所有开放能力. 前提准备 微信开发者工具 创 ...

  7. 小程序开发 access_token 统一管理

    TOKEN 定时刷新器 一.背景 对于使用过公众平台的API功能的开发者来说,access_token绝对不会陌生,它就像一个打开家门的钥匙,只要拿着它,就能使用公众平台绝大部分的API功能.因此,对 ...

  8. 分享使用tcb-router路由开发的云函数短信平台SDK

    上篇文章我们分享了如何使用纯的云函数开发的榛子短信短信(http://smsow.zhenzikj.com)SDK,由于微信对于未付费云函数个数的限制,这种方法存在缺陷,经过改进,使用tcb-rout ...

  9. 【微信小程序云开发】从陌生到熟悉

    前言 微信小程序在9月10号正式上线了云开发的功能,弱化后端和运维概念,以前开发一个小程序需要申请一个小程序,准备一个https的域名,开发需要一个前端一个服务端,有了云开发只有申请一个小程序,一个前 ...

  10. 小程序云开发--云函数上传文件或图片 base64

    云函数开发遇到的问题 在微信云开发环境当中,普通的用户并没有往云存储内写入文件的权限 所以普通用户想要使用wx.cloud.uploadFile显然是不现实的 但是我们同时也知道,云函数是后台服务端, ...

随机推荐

  1. redis集群数据迁移

    redis集群数据备份迁移方案 n  迁移环境描述及分析 当前我们面临的数据迁移环境是:集群->集群. 源集群: 源集群为6节点,3主3备 主 备 192.168.112.33:8001 192 ...

  2. win服务器管理工具,服务器vps管理

    win系列服务器,vps桌面如何管理?用这个工具: IIS7远程桌面批量管理,同时管理上千台vps,服务器,3389远程端口.

  3. linux solr 安装

    1.官网下载solr任意版本 2.解压安装包 3.进入solr文件bin目录修改solr.in.sh中的SOLR_ULIMIT_CHECKS属性设置为false 4.启动solr 5.检查solr状态 ...

  4. LibreOJ 6277. 数列分块入门 1 题解

    题目链接:https://loj.ac/problem/6277 题目描述 给出一个长为 \(n\) 的数列,以及 \(n\) 个操作,操作涉及区间加法,单点查值. 输入格式 第一行输入一个数字 \( ...

  5. Java网络编程——TCP图片上传

    1.编写一个服务器端程序,用来接收图片.创建一个监听指定端口号的ServerSocket服务端对象,在while(true)无限循环中持续调用ServerSocket的accept()方法来接收客户端 ...

  6. webpack 实时编译typescript与scss

    webpack.config.js const path = require('path'); const CopyWebpackPlugin = require('copy-webpack-plug ...

  7. 小小知识点(二十九)open access 和 classic access期刊出版形式分别指的是什么?

    open access: 作者付费,读者免费获取方式:相当于你给所有读者买单,就是交钱让你的文章可免费下载,很显然文章的被引用几率机会会提高.对于那些追求他引的单位,个别作者就得出点银子了 class ...

  8. TypeScript 源码详细解读(1)总览

    TypeScript 由微软在 2012 年 10 月首发,经过几年的发展,已经成为国内外很多前端团队的首选编程语言.前端三大框架中的 Angular 和 Vue 3 也都改用了 TypeScript ...

  9. 原生javascript 基础动画函数封装(二)

    <!DOCTYPE html> <html> <head> <title></title> <style type="tex ...

  10. mongodb的文本搜索

    1.当mongodb进程文本搜索的时候, 一个collection,只有一个文本查询的索引. 2.全文索引的定义,搜索的是有意义的词,不是字母 一开始是简单的用中文姓名的姓,如:张,来查询,但是无效, ...