批量修改文件夹权限为755,文件权限为644
2021-01-09 tech linux 1 mins 210 字
文件夹
find . -type d -print0 | xargs -0 chmod 0755
文件
find . -type f -print0 | xargs -0 chmod 0644
find . -type d -print0 | xargs -0 chmod 0755
find . -type f -print0 | xargs -0 chmod 0644
作为kubernetes相关的开发人员,以前我都是用 kind 拉起集群,再进行相关开发的。但kind 毕竟只是一个模拟工具,没法满足我们对 kubernetes 更底层的开发。我使用了 ansible 和 vagrant 进行模拟部署,这篇文章进行一个简要记录。
vagrant 相关的操作可以参考我先前的文章——《vagrant 快速上手(基于Debian9)》
以下是我的 Vagrantfile,我将其置于 /etc/vagrant
设置了3个虚机n1 n2 n3,内存cpu可以随意配置,推荐最小1c1g。
运行:
vagrant up
ssh的相关配置如下:
记住上边的信息,在ansible的配置里,需要使用它们来与虚机通信。
虚机运行情况如下:
参考我先前的文章——《ansible 快速上手(Debian 9)》
kubeaze 是个 基于 ansible 快速搭建 kubernetes 的项目。可以免翻墙安装,省去了国内开发者很多麻烦, GitHub 上截至2021.01是 6.5k 个赞,是个非常受欢迎的项目了。
我用它来进行kubernetes的安装。基于最简单的架构,我配置了2个master,1个node。
下载easzup
chmod +x ./easzup
# 下载kubernetes 镜像
./easzup -D
运行后, /etc/ansible
目录下就下载好了所有相关的文件了。
如果还没有安装 ansible,按照 boot.sh 的命令安装。
配置虚机信息
cp example/hosts.multi-node hosts
hosts 文件 用来描述 虚机和kubernetes的相关信息,可以根据 vagrant 相关的配置和个人需要修改 hosts 文件。
我的 hosts 文件如下:
10.184.0.131 ansible_ssh_host=127.0.0.1 ansible_ssh_port=2200 ansible_ssh_private_key_file=/etc/vagrant/.vagrant/machines/n1/virtualbox/private_key
10.184.0.132 ansible_ssh_host=127.0.0.1 ansible_ssh_port=2201 ansible_ssh_private_key_file=/etc/vagrant/.vagrant/machines/n2/virtualbox/private_key
10.184.0.133 ansible_ssh_host=127.0.0.1 ansible_ssh_port=2202 ansible_ssh_private_key_file=/etc/vagrant/.vagrant/machines/n3/virtualbox/private_key
[local]
test
# 'etcd' cluster should have odd member(s) (1,3,5,...)
# variable 'NODE_NAME' is the distinct name of a member in 'etcd' cluster
[etcd]
10.184.0.131 NODE_NAME=etcd1
10.184.0.132 NODE_NAME=etcd2
10.184.0.133 NODE_NAME=etcd3
# master node(s)
[kube-master]
10.184.0.131
10.184.0.132
# work node(s)
[kube-node]
10.184.0.133
# [optional] harbor server, a private docker registry
# 'NEW_INSTALL': 'yes' to install a harbor server; 'no' to integrate with existed one
# 'SELF_SIGNED_CERT': 'no' you need put files of certificates named harbor.pem and harbor-key.pem in directory 'down'
[harbor]
#192.168.1.8 HARBOR_DOMAIN="harbor.yourdomain.com" NEW_INSTALL=no SELF_SIGNED_CERT=yes
# [optional] loadbalance for accessing k8s from outside
[ex-lb]
#192.168.1.6 LB_ROLE=backup EX_APISERVER_VIP=10.184.0.13250 EX_APISERVER_PORT=8443
#192.168.1.7 LB_ROLE=master EX_APISERVER_VIP=10.184.0.13250 EX_APISERVER_PORT=8443
# [optional] ntp server for the cluster
[chrony]
#10.184.0.131
[all:vars]
# --------- Main Variables ---------------
# Cluster container-runtime supported: docker, containerd
CONTAINER_RUNTIME="docker"
# Network plugins supported: calico, flannel, kube-router, cilium, kube-ovn
CLUSTER_NETWORK="calico"
# Service proxy mode of kube-proxy: 'iptables' or 'ipvs'
PROXY_MODE="iptables"
# K8S Service CIDR, not overlap with node(host) networking
SERVICE_CIDR="10.68.0.0/16"
# Cluster CIDR (Pod CIDR), not overlap with node(host) networking
CLUSTER_CIDR="172.20.0.0/16"
# NodePort Range
NODE_PORT_RANGE="20000-40000"
# Cluster DNS Domain
CLUSTER_DNS_DOMAIN="cluster.local."
# -------- Additional Variables (don't change the default value right now) ---
# Binaries Directory
bin_dir="/opt/kube/bin"
# CA and other components cert/key Directory
ca_dir="/etc/kubernetes/ssl"
# Deploy Directory (kubeasz workspace)
base_dir="/etc/ansible"
# Calico
#
IP_AUTODETECTION_METHOD: "interface=enp0s8"
ssh的配置信息,在 vagrant 目录下 运行命令
vagrant ssh-config
可以获得。
修改网络插件相关配置。
由于我是用的是 calico,在 hosts 文件中修改了下面几个配置:
如果不配置 IP_AUTODETECTION_METHOD,默认是 can-reach xxx
,很有可能导致集群无法互联。 vagrant 内网卡名为 enp0s8
.
修改 ansible.cfg 配置文件
增加下面的配置,使用 vagrant 用户。
remote_user = vagrant
修改以下ansible的yaml文件,增加become: true
配置
这么修改的原因是,如果不使用 become: true
,apt 更新等很多需要root权限的操作将报错,使得流程不能继续下去。
修改大致如下。
运行。
cd /etc/vagrant
ansible-playbook 01.prepare.yml
ansible-playbook 02.etcd.yml
ansible-playbook 03.docker.yml
ansible-playbook 04.kube-master.yml
ansible-playbook 05.kube-node.yml
ansible-playbook 06.network.yml
ansible-playbook 07.cluster-addon.yml
测试
kubectl get nodes
wget cdn.kelu.org/blog/2021/01/demo.yaml
kubectl apply -f demo.yaml
查看本机上能否访问以下地址:
只要能访问就说明网络是ok的。
我原意是升级docker,参考了官方文档:https://docs.docker.com/engine/install/debian/ 中的命令,并没有什么用:
$ sudo apt-get remove docker docker-engine docker.io containerd runc
不过倒是一个很好的参考,可以使用dpkg命令查看有哪些相关软件安装:
dpkg -l | grep docker
然后直接卸载:
apt-get remove docker-ce-cli docker-ce
apt-get autoremove # 会自动卸载containerd.io等一干软件。
完成。
grub启动设置在/etc/default/grub中,打开 default grub 配置:
$ sudo vim /etc/default/grub
修改以下配置:
更新grub,设置多用户启动:
$ sudo update-grub
$ sudo systemctl set-default multi-user.target
重启。
如果要启动X Server,在命令行输入startx,若要关闭图形界面,只要kill掉Xorg进程即可。
$ sudo startx # 启动X Server
$ ps aux | grep xserver
$ sudo kill <pid> # 关闭x server
反向操作即可:
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""
#GRUB_TERMINAL=console
设置图形化界面启动
$ sudo update-grub
$ sudo systemctl set-default graphical.target
ansible 是个运维利器,用于自动化运维。如果你在工作中需要管理多个机器,或者做PaaS/IaaS相关的快速原型开发,那么ansible是个非常有用的工具,可以帮助你快速完成目标。
我在最近工作中使用了 ansible,这篇文章做个简单记录备忘。
ansible 集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
特点:
概念:
inventory ,即主机列表文件hosts,我们可通过它对定义每个节点的代号、连接信息和分组。
ansible.cfg, ansible的配置文件,默认位于 /etc/ansible。
ad-hoc, ansible 提供的一种命令方式,用于解决简单任务。
playbooks,ansible 提供的另一种命令方式,适合于复杂应用的部署。下面是一个例子:
---
- hosts: webservers
vars:
http_port: 80
max_clients: 200
remote_user: root
tasks:
- name: ensure apache is at the latest version
yum: pkg=httpd state=latest
- name: write the apache config file
template: src=/srv/httpd.j2 dest=/etc/httpd.conf
notify:
- restart apache
- name: ensure apache is running
service: name=httpd state=started
handlers:
- name: restart apache
service: name=httpd state=restarted
Tasks, playbook的核心,定义顺序执行的动作。
每一个 play 包含了一个 task 列表(任务列表)。一个 task 在其所对应的所有主机上(通过 host pattern 匹配的所有主机)执行完毕之后,下一个 task 才会执行。
每一个task必须有一个名称name,这样在运行playbook 时,从其输出的任务执行信息中可以很好的辨别出是属于哪一个task的。
action。每个 action 调用一个 ansbile module。 语法:
module: module_parameter=module_value
Modules,也被称为 “task plugins” 或 “library plugins”,也可以仅仅通过 ansible
命令来运行它们。下面是几个例子,-m后面接调用module的名字,-a后面接调用module的参数:
ansible webservers -m service -a "name=httpd state=started"
ansible webservers -m ping
ansible webservers -m command -a "/sbin/reboot -t now"
bash 无论在命令行上执行,还是bash脚本中,都需要调用cd、ls、copy、yum等命令;module就是Ansible的“命令”。
roles
我使用的是 Debian 9,基于python-pip进行安装。CentOS系和ubuntu的安装差别不是很大。
apt-get install -y python-pip
pip install ansible
安装完成后简单测试如下:
ansible localhost -m command -a 'echo Hello World.'
localhost | SUCCESS | rc=0 >>
Hello World.
单节点使用完成了,下面是我多节点的配置。在/etc/ansible目录下创建两个文件如下:
我使用了vagrant 在本地运行了4个虚机,已经默认做好了免密登陆。正常节点之间也需要做好密钥免密登陆的配置。上述两个文件内容如下:
ansible.cfg 配置文件设置了host文件、默认的远程登录用户和不检查host key 的设置。
hosts文件设置了节点的别名和相关连接信息,并做了两个分组,local和k8s1。
运行一个测试命令,完成。
ansible all -m command -a 'echo Hello World.'