准备分三个文章写关于coreos
一、安装,
二、配置,
三、kubernetes
偏向实际操作碰到的一些问题和处理过程。
coreos网上说的已经很多了,对我来说是因为据说它是轻量级,又是提供了容器内部署应用所需要的基础功能环境以及一系列用于服务发现和配置共享的内建工具,又是自动化又能规模化,一切美好尽在眼前,so,试试吧!
为了尽可能对别人有所帮助先说一下我的基本环境,
1, 宿主机是centos 3.10.0-957.12.1.el7.x86_64
2, 在主机上安装kvm,利用kvm安装coreos
3, 下载的coreos版本是2303.3.0
http://coreos.com/releases/ 下载
coreos_production_iso_image.iso
coreos_production_image.bin.bz2
一、创建磁盘
qemu-img create -f qcow2 /opt/kvmdisk/core1.img 5G
一、定义一个kvm安装配置文件
#文件名 coreos.xml
<domain type='kvm'>
<name>coreos1</name>
<memory>2048576</memory>
<currentMemory>2048576</currentMemory>
<vcpu>2</vcpu>
<os>
<type arch='x86_64' machine='pc'>hvm</type>
<boot dev='cdrom'/>
<!-- <boot dev='hd'/> -->
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset='localtime'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/opt/kvmdisk/core1.img'/>
<target dev='hda' bus='ide'/>
</disk>
<disk type='file' device='cdrom'>
<source file='/opt/os/coreos_production_iso_image.iso'/>
<!-- 镜像位置 -->
<target dev='hdb' bus='ide'/>
</disk>
<interface type='bridge'>
<source bridge='virbr0'/>
<!-- 注意别搞准自己的bridge -->
<mac address="00:16:3e:5d:aa:a8"/>
</interface>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='5901' autoport='no' listen = '0.0.0.0' keymap='en-us'/>
<!-- 回头下一个vnc的客户端,远程连接属主机的vnc端口 ,如果你有端口冲突一类的事,要注意自己调配 -->
</devices>
</domain>
二,配置文件导入kvm
virsh define coreos.xml
三,本应该提前准备的东西
coreos启动后需要执行一次安装,命令大概形式如下:
sudo su - root
coreos-install -d /dev/sda -C stable -c cloud-config -b http://192.168.122.2/
这里,
第一需要一个安装的配置文件cloud-config
第二需要一个能下载刚才的 coreos_production_image.bin.bz2 文件的地方
第二个需求好办,把下载回来的文件一起放在局域网里的http服务上,嗯,一个做过后才领悟的小坑,这个文件的位置要放在 他自己的版本号目录下如我的 /var/www/html/2303.3.0/ 如果你不知道具体版本号,你启动后会停在下载的位置,哪里他指出了url的全部路径。
第一个需求:cloud-config配置文件, 最好不要在终端里去敲,写好了放在跟刚才http的网络上, coreos启动后已经具备很多工具比如wget, 你可以远程下回来。不排除你会遭受很多失败,省力气是你能走多远的重要一环
wget http://192.168.122.2/cloud-config
四、 cloud-config怎么写
说到这个配置,得吐槽一下。coreos到底经历了什么,网上漫天飞的cloud-config 其实并不是coreos的正主,去看看官网上怎么说,cloud-config 是写成yaml文件,让人写人看的, 机器执行的是一个叫做Ignition Config的文件格式,yaml由经过一个ct工具转换而来。对比了一下两种格式大概一种就是yaml另外一种Ignition大概是json....., 值得说的是,这两种文件目前其实都能用,可能yaml支持的东西有限吧,简单安装还是能对付的,毕竟人家已经选了正主了,不过,在这篇文字里先就着yaml用,
#cloud-config
users:
- name: core
ssh-authorized-keys:
- ssh-rsa AAAAB3NzaC . ....
- groups:
- sudo
- docker
这里的ssh-authorized-keys 我直接用我属主机上的/root/.ssh/id_rsa.pub ,如果你没有,ssh-keygen生成一下, 很多利用xshell生成的,我也用过,还是觉得linux下自带的方便 ,一路回车就ok。
将id_rsa.pub 一行全部copy过来。
#ssh-keygen
待会用ssh登录时候用
如果不是用户自己默认的秘钥,加-i 指定自己的私钥
ssh -i /path/id_rsa core@192.168.122.x
如果用默认用户自己的秘钥,就不用加参数了
ssh core@192.168.122.x
也很多人不习惯这种,想生成password,是可以的,这里抄一段官网的。
passwd:
users:
- name: user1
password_hash: "$6$43y3tkl..."
ssh_authorized_keys:
- key1
home_dir: /home/user1
no_create_home: true
groups:
- wheel
- plugdev
重要的是这password_hash的生成方式,也有好几种.
如下:
# On Debian/Ubuntu (via the package "whois")
mkpasswd --method=SHA-512 --rounds=4096
# OpenSSL (note: this will only make md5crypt. While better than plantext it should not be considered fully secure)
openssl passwd -1
# Python
python -c "import crypt,random,string; print(crypt.crypt(input('clear-text password: '), '\$6\$' + ''.join([random.choice(string.ascii_letters + string.digits) for _ in range(16)])))"
# Perl (change password and salt values)
perl -e 'print crypt("password","\$6\$SALT\$") . "\n"'
有很多诡异的东西,不得不告诉你, 我只有ssh_authorized_keys成功过。而在json的方式下,我连ssh_authorized_keys也没成功,
所以如果你性子急,等到安装完成的时候, 你还有机会做一些操作。这会儿先不说。毕竟安装完成之前,系统也没验证你的秘密秘钥是否能用。
这里可以配置的东西还有很多,基本如网络,文件什么的,先就着简单的来。不多说了。
networkd:
units:
- name: static.network
contents: |
[Match]
Name=ens3
[Network]
Address=192.168.122.171/24
Gateway=192.168.122.1
DNS=202.101.224.68
systemd:
units:
- name: settimezone.service
enabled: true
contents: |
[Unit]
Description=Set the time zone
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/timedatectl set-timezone Asia/Shanghai
[Install]
WantedBy=multi-user.target
五、执行安装
用不同的安装配置文件格式,命令略有区别, 一不小心可能被蒙。
yaml格式的
sudo su - root
coreos-install -d /dev/sda -C stable -c cloud-config -b \
http://192.168.122.2/
Ignition格式
用github下的 container-linux-config-transpiler 工具,工具本身要make编译一下,需要golang环境,完成之后生成了一个ct执行文件,就是我们需要的转换工具
先转换格式
$/root/container-linux-config-transpiler/bin/ct \
< cloud-new --files-dir /etc >core1.json
其中--files-dir /etc 是去找你机器上的hosts文件,你可以自己定义一个
注意区别主要是 -i 引用core1.json配置,
sudo su - root
coreos-install -d /dev/sda -i core1.json -b http://192.168.122.2/
六、 安装结束之后
顺利的话,没多久就能看见success提示, 这并不能高兴太早,
别的不说你的key能通过吗?
如果有问题:你又是个急性子的话这里有两个办法至少帮你把眼下这个地方过了。
第一种办法,自己手动把authorized_keys 文件建起来core 用户/home/.ssh/authorized_keys,
第二种办法: 启动coreos的时候, 在GRUB 界面按e, 编辑最后一行里面
加上 coreos.autologin ,按ctrl+x ,启动后直接登录core用户, sudo su - root 想干嘛就干嘛吧,也常见于忘记密码的人。
发现已经太长了, 这部分就此打住。
可是还有一大部分未完,因为,对于用于云计算的可以规模化的集群的系统,
手工的玩法是不能满足需要的, 下一章用ipxe 完成批量操作。