使用disk-image-builder(DIB)制作Ironic 裸金属镜像

Diskimage-builder 是openstack社区用于制作镜像的工具。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
基于CentOS 7

#pip3 install diskimage-builder ironic-python-agent-builder
#yum -y install qemu-img
#yum install -y libguestfs-tools-c #提供virt-sysprep
#export DIB_DEV_USER_USERNAME=devuser #初始用户名devuser
#export DIB_DEV_USER_PASSWORD=password #初始密码password
#export DIB_DEV_USER_PWDLESS_SUDO=YES #允许sudo
#export DIB_CLOUD_INIT_DATASOURCES="ConfigDrive, OpenStack" #cloud-init 的datasource是ConfigDrive, OpenStack
#export AUTHORIZE_SSH=true
#export DIB_PYTHON_VERSION=3
#export DIB_PYTHON=python3
构建IPA引导镜像
#ironic-python-agent-builder -o centos7-ipa-x86 --release 7 centos -e "devuser dynamic-login dhcp-all-interfaces"
构建裸机镜像
#disk-image-create centos7 centos7 dhcp-all-interfaces iscsi-boot grub2 dracut-regenerate install-static devuser -o CentOS7 cloud-init-datasources
1
2
#export LIBGUESTFS_BACKEND=direct 
#virt-sysprep --root-password password:password -a CentOS7.qcow2

若 virt-sysprep 报错,请 yum update 再重启物理机

排错

1
2
3
4
5
6
1. git 连接openstack/requirements 失败,更改为自己的源
#vim /usr/local/share/ironic-python-agent-builder/dib/ironic-python-agent-ramdisk/source-repository-requirements

2. setlocale: LC_ALL: cannot change locale (C.UTF-8): No such file or directory Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-rit13y_p/iso8601/
#yum -y install langpacks-zh_CN.noarch

记一次kubernetes flannel/coredns pod异常

某一集群,双网卡,突然很多业务POD异常,排查发现DNS无法解析,进而怀疑coredns出现了问题。。。

查看coredns pod日志
1 reflector.go:134] github.com/coredns/coredns/plugin/kubernetes/controller.go:317: Failed to list *v1.Endpoints: Get https://172.30.0.1:443/api/v1/endpoints?limit=500&resourceVersion=0: dial tcp 172.30.0.1:443: connect: no route to host

问题来了,172.30.0.1 是谁 ?

想起 Kuberntes svc的cidr是 172.30.0.0/16, pod的cidr是 172.20.0.0/16

由刚才那个url,判断该url为Kubeapi 的地址

1
2
#kubectl get svc 
kubernetes ClusterIP 172.30.0.1 <none> 443/TCP 32d

发现172.30.0.1 是kubernetes svc的地址

1
2
3
#kubectl describe svc kubernetes 
发现该svc指向了三个endpoint
10.19.114.110:6443,10.19.114.111:6443,10.19.114.112:6443

才发现这三个endpoint不对, (服务器IP已经改为 192.168.**了。。。。)

原因是 什么呢?

想起 eth0 换IP地址了,所以肯定和换IP地址有关。

解决办法:

1
2
3
#systemctl restart kube-controller-manager.service 
#systemctl restart kube-scheduler.service
#systemctl restart kube-apiserver.service

改进方法:

内群内部通信走 eth0网卡,不再改变eth0的IP,如需改变IP,只改eth1不改eth0

通过ssh隧道转发本地ssh

实际场景,有A服务器,位于某内网环境,没有外网IP,外面无法SSH

但我自己有比如阿里云上的一台服务器B,我想直接SSH A服务器,怎么办?

1
2
3
B 服务器IP 101.198.*.*
A 服务器执行
#ssh -R 2201:0.0.0.0:22 -p 22 USERNAME@101.198.*.* -f -N

etcd 查询数据

etcd2和etcd3是不兼容的,两者的api参数也不一样,详细请查看 etcdctl -h

api2 使用方法
ETCDCTL_API=2 etcdctl ls /

api3 使用方法
从kubernetes 1.6开始,etcd集群使用version 3, 现在生产很多集群都是1.18的了。。。

1
2
3
4
5
6
7
#export ETCDCTL_API=3
#export ETCD_ENDPOINTS=https://192.168.132.2:2379、
#export ETCDCTL_CACERT=/etc/kubernetes/ssl/ca.pem
#export ETCDCTL_CERT=/etc/kubernetes/ssl/etcd.pem
#export ETCDCTL_KEY=/etc/kubernetes/ssl/etcd-key.pem
#etcdctl --endpoints=${ETCD_ENDPOINTS} --cacert=${ETCDCTL_CACERT} --cert=${ETCDCTL_CERT} --key=${ETCDCTL_KEY} get / --prefix --keys-only=true

查看某个具体的key的值

1
#etcdctl --endpoints=${ETCD_ENDPOINTS} --cacert=${ETCDCTL_CACERT} --cert=${ETCDCTL_CERT} --key=${ETCDCTL_KEY} get /registry/services/endpoints/default/kubernetes --keys-only=false

kolla-ansible build openstack arm镜像

创建私有仓库
1
2
3
服务器 10.16.57.168
#mkdir /data/registry -p
#docker run -d -p 4000:5000 -v /data/registry:/var/lib/registry --restart=always --name registry registry
构建镜像
1
2
3
4
5
6
#git clone https://github.com/openstack/kolla -b stable/stein
#cd kolla
#pip2 install jinja2
#pip2 install docker
#pip2 install gitpython
#tools/build.py --base centos --base-arch aarch64 --tag stein --type source --registry 10.16.57.168:4000 --push

初试 baremetal-operator 部署裸金属服务器(一)

宿主机

开启ipv6

部署kubernetes

calico 网络方案

(步骤略)

部署 baremetal-operator-master

  1. 源码安装 go14环境
    (略)
  2. 安装新版kubectl (新版本已经默认集成)
1
2
3
#curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.19.0/bin/linux/amd64/kubectl
#chmod 755 kubectl
#mv kubectl /usr/bin/
  1. 安装baremetal operator (我部署的时候TLS版本老是有问题)
1
2
3
4
5
#export GOPROXY=https://goproxy.io
#export IRONIC_HOST="localhost"
#export IRONIC_HOST_IP="10.145.69.37"
#bash tools/install_kustomize.sh
#./tools/deploy.sh true true false false false

惊奇发现,部署好简单? 啥也不需要配置 ? 往下走。。。。

Read More

使用 Kustomize 配置 Kubernetes 应用

​ kustomize是sig-cli的一个子项目,它的设计目的是为kubernetes提供一种可以重复使用配置的声明式应用管理,从而在配置工作中用户只需要管理和维护kubernetes的原生API对象,不需要使用复杂的模版,对 K8s 应用定义为由 Yaml 表示的资源描述,对 K8s 应用的变更可以映射到对 Yaml 的变更上。而这些变更操作可以利用 git 等版本控制程序来管理,因此用户得以使用 git 风格的流程对 K8s 应用进行管理。

pip加速使用国内源

pip国内的一些镜像

提示:若担心安全问题请使用HTTPS加密源

修改源方法:

临时使用:

Linux Mac Windows 通用命令

可以在使用pip的时候在后面加上-i参数,指定pip源

#pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple

永久修改:

Linux:

修改 pip.conf 文件 (没有就创建一个)

$HOME/.config/pip/pip.conf

修改内容如下:

1
2
3
[global]

index-url = https://pypi.tuna.tsinghua.edu.cn/simple12

Mac:

修改 pip.conf 文件

$HOME/Library/Application Support/pip/pip.conf

如果没有上面的目录,在如下目录创建 pip.conf

$HOME/.config/pip/pip.conf

修改内容如下:

1
2
3
[global]

index-url = https://pypi.tuna.tsinghua.edu.cn/simple12

Windows:

修改 pip.conf 文件 (没有就创建一个)

%APPDATA%\pip\pip.ini

修改内容如下:

1
2
3
[global]

index-url = https://pypi.tuna.tsinghua.edu.cn/simple

修改文件后,执行命令发生错误

使用非HTTPS加密源(如豆瓣源),在执行命令发生错误,在命令最后加上--trusted-host pypi.douban.com

pip install django -i http://pypi.douban.com/simple –trusted-host pypi.douban.com

mysql8.0 新增用户授权

MySQL 8.0 的用户授权语句和之前版本有所区别, mysql 8.0 新增用户并授权访问

1
2
>CREATE USER 'lining'@'%' IDENTIFIED BY '123456'; 
>GRANT ALL ON kubestack.* TO 'lining'@'%' WITH GRANT OPTION;