kubernetes二进制部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
说明:
使用ipvs需要安装相应的工具来处理”yum install ipset ipvsadm -y“
确保 ipvs已经加载内核模块, ip_vs、ip_vs_rr、ip_vs_wrr、ip_vs_sh、
nf_conntrack_ipv4。如果这些内核模块不加载,当kube-proxy启动后,会退回到iptables模式。

##基础环境初始化:
yum -y install vim telnet iotop openssh-clients openssh-server ntp net-tools.x86_64 wget

sed -i '/* soft nproc 4096/d' /etc/security/limits.d/20-nproc.conf
echo '* - nofile 65536' >> /etc/security/limits.conf
echo '* soft nofile 65535' >> /etc/security/limits.conf
echo '* hard nofile 65535' >> /etc/security/limits.conf
echo 'fs.file-max = 65536' >> /etc/sysctl.conf
ssh-keygen -t rsa
ssh-copy-id -p52000 -i /root/.ssh/id_rsa.pub root@192.168.3.136
ssh-copy-id -p52000 -i /root/.ssh/id_rsa.pub root@192.168.3.137

1.部署etcd
cd /home/k8s_install/Deploy/ssl_etcd
chmod +x cfssl.sh
./cfssl.sh

cat cfssl.sh
curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o /usr/local/bin/cfssl
curl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o /usr/local/bin/cfssljson
curl -L https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -o /usr/local/bin/cfssl-certinfo
chmod +x /usr/local/bin/cfssl /usr/local/bin/cfssljson /usr/local/bin/cfssl-certinfo

mkdir /home/k8s_install/ssl_etcd/ && cd /home/k8s_install/ssl_etcd/


mkdir /home/k8s_install/etcd/{cfg,bin,ssl} -p
cp {ca,server-key,server}.pem /home/k8s_install/etcd/ssl/

wget https://github.com/etcd-io/etcd/releases/download/v3.2.12/etcd-v3.2.12-linux-amd64.tar.gz

tar -zxvf etcd-v3.2.12-linux-amd64.tar.gz

cp -p etcd-v3.2.12-linux-amd64/etcd* /home/k8s_install/etcd/bin/

[root@k8s-dev-master bin]# cat /usr/lib/systemd/system/etcd.service
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
EnvironmentFile=/home/k8s_install/etcd/cfg/etcd
ExecStart=/home/k8s_install/etcd/bin/etcd \
--name=${ETCD_NAME} \
--data-dir=${ETCD_DATA_DIR} \
--listen-peer-urls=${ETCD_LISTEN_PEER_URLS} \
--listen-client-urls=${ETCD_LISTEN_CLIENT_URLS},http://127.0.0.1:2379 \
--advertise-client-urls=${ETCD_ADVERTISE_CLIENT_URLS} \
--initial-advertise-peer-urls=${ETCD_INITIAL_ADVERTISE_PEER_URLS} \
--initial-cluster=${ETCD_INITIAL_CLUSTER} \
--initial-cluster-token=${ETCD_INITIAL_CLUSTER_TOKEN} \
--initial-cluster-state=new \
--cert-file=/home/k8s_install/etcd/ssl/server.pem \
--key-file=/home/k8s_install/etcd/ssl/server-key.pem \
--peer-cert-file=/home/k8s_install/etcd/ssl/server.pem \
--peer-key-file=/home/k8s_install/etcd/ssl/server-key.pem \
--trusted-ca-file=/home/k8s_install/etcd/ssl/ca.pem \
--peer-trusted-ca-file=/home/k8s_install/etcd/ssl/ca.pem
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target


[root@k8s-dev-master bin]# cat /home/k8s_install/
etcd/ ssl_etcd/
[root@k8s-dev-master bin]# cat /home/k8s_install/etcd/
bin/ cfg/ ssl/
[root@k8s-dev-master bin]# cat /home/k8s_install/etcd/cfg/etcd
#[Member]
ETCD_NAME="etcd01"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.3.135:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.3.135:2379"

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.3.135:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.3.135:2379"
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.3.135:2380,etcd02=https://192.168.3.136:2380,etcd03=https://192.168.3.137:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"




##同步到其它etcd节点
scp -rp -P52000 /home/k8s_install/etcd/{bin,cfg,ssl} root@192.168.3.136:/home/k8s_install/etcd/
scp -rp -P52000 /home/k8s_install/etcd/{bin,cfg,ssl} root@192.168.3.137:/home/k8s_install/etcd/

scp -rp -P52000 /usr/lib/systemd/system/etcd.service root@192.168.3.136:/usr/lib/systemd/system/
scp -rp -P52000 /usr/lib/systemd/system/etcd.service root@192.168.3.137:/usr/lib/systemd/system/

阅读全文 »

故障现象

服务器故障现象

1
2
xshell登录不了服务器,直接卡死
服务器CPU 负载很高,有一个进程cpu进程达到一千多,top -c 查看异常进程command 是bash, kill 命令杀死进程一会自动拉起, 如下图:

处理过程

1.先修改用户密码和ssh端口,计划任务

1
2
更改服务器ssh端口,和root 普通用户密码
检查当前进程使用root 账户启动,查看root 计划任务(/etc/crontab和crontab -l) 是否有异常计划任务

2.查看日志

1
2
3
4
5
6
7
内核及公共消息日志:/var/log/messages
计划任务日志:/var/log/cron
系统引导日志:/var/log/dmesg
邮件服务日志:/var/log/maillog
用户登录验证日志:/var/log/secure
最近用户登录日志:/var/log/lastlog
用户登录日志:/var/log/wtmp(该文件是二进制文件,不能用cat、tail等命令访问,而是通过last和lastlog命令来调用)

3.用systemctl status 查看异常进程,如下图

阅读全文 »

kubernetes secret 描述

1
2
3
4
5
6
7
8
9
secret 用于存储和管理一些敏感数据,比如密码,token,密钥等敏感信息。它把 Pod 想要访问的加密数据存放到 Etcd 中。然后用户就可以通过在 Pod 的容器里挂载 Volume 的方式或者 环境变量 的方式访问到这些 Secret 里保存的信息

Secret 有三种类型

Opaque:base64 编码格式的 Secret,用来存储密码、密钥等;但数据也可以通过base64 –decode解码得到原始数据,所有加密性很弱。

Service Account:用来访问Kubernetes API,由Kubernetes自动创建,并且会自动挂载到Pod的 /run/secrets/kubernetes.io/serviceaccount 目录中。Service Account 对象的作用,就是 Kubernetes 系统内置的一种“服务账户”,它是 Kubernetes 进行权限分配的对象。比如,Service Account A,可以只被允许对 Kubernetes API 进行 GET 操作,而 Service Account B,则可以有 Kubernetes API 的所有操作权限

kubernetes.io/dockerconfigjson : 用来存储私有docker registry的认证信息

Opaque Secret 使用

1
2
3
4
[root@test1 ~]# echo -n "admin" | base64
YWRtaW4=
[root@test1 ~]# echo -n "123456" | base64
MTIzNDU2

创建secret

1
2
3
4
5
6
7
8
9
10
11
vim myapp-secret.yaml

# 内容
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: YWRtaW4=
password: MTIzNDU2

将secret导入环境变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deploy
spec:
replicas: 2
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: 192.168.26.160:86/xielong/myapp:v1.0
ports:
- containerPort: 80
env:
- name: MYSQL_SERVICE_USER
valueFrom:
secretKeyRef:
name: mysecret
key: username
- name: MYSQL_SERVICE_PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: password

查看环境变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@master1 yaml]# kubectl exec myapp-deploy-5df5dfbb7f-75qql env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=myapp-deploy-5df5dfbb7f-75qql

# 成功导入
MYSQL_SERVICE_USER=admin
MYSQL_SERVICE_PASSWORD=123456

KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
NGINX_VERSION=1.19.6
NJS_VERSION=0.5.0
PKG_RELEASE=1~buster
HOME=/root
阅读全文 »

shell 判断当前用户和传参个数

1
2
3
4
5
6
7
8
9
10
11
##Judge user root
if [ $UID -ne 0 ];then
echo "You are not support user,Please call root"
exit 1;
fi

##Judge arg number
if [ $# -ne 1 ];then
echo $"Usage: $0 {start|stop}"
exit 1
fi

case配置和使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function usage() {
packge=$1
case $packge in
stop)
echo "Stop Elk Cluster Service"
elk_stop
;;
start)
echo "Start Elk Cluster Service"
elk_start
;;
status)
echo "Elk Cluster Status"
elk_status
;;
*)
echo -e "\033[41;30m Usage: $0 $1 Incorrect parameter \033[0m"
echo $"Usage: $0 {start|stop|status}"
exit 0
;;
esac
}

for arg in "$*"
do
usage $arg
done

文件追加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
echo "124567890" | tee -a /tmp/1.txt  #往/tmp/1.txt

cat >> /tmp/1.txt << EOF #往/tmp/1.txt
1111111111
EOF

cat >/tmp/1.txt << EOF #覆盖/tmp/1.txt 原有文件内容
11111
EOF

cat << EOF > /tmp/1.txt #覆盖/tmp/1.txt 原有文件内容
> 22222222
> EOF

cat <<EOF>>/tmp/1.txt #往/tmp/1.txt 追加内容
> 333333
> EOF

变量截取和替换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
${变量#匹配规则}	从头开始匹配,最短删除
${变量##匹配规则} 从头开始匹配,最长删除
${变量%匹配规则} 从尾开始匹配,最短删除
${变量%%匹配规则} 从尾开始匹配,最长删除
${变量/旧字符/新字符} 替换变量内的旧字符为新字符,只替换第一个
${变量//旧字符/新字符} 替换变量内的旧字符为新字符,全部替换

案列:
"i love you, do you love me"
tmp=${var##*ove}
echo $tmp
tmp=${var##*ove}
echo $tmp
tmp=${var%ove*}
echo $tmp
tmp=${var%%ove*}
echo $tmp
tmp=${var/love/LOVE}
echo $tmp
tmp=${var//love/LOVE}
echo $tmp
字符串处理
1
2
3
4
5
6
7
8
9
10
11
12
13
计算字符串长度
1、${#string}
2、expr length $string
var="i love you"
echo ${#var}
expr length ${var}

获取字符串中的子串
1、${string:pos}
2、${string:pos:len}
3、${string:(-pos)}
4、expr substr $string $pos $len

阅读全文 »

php7.3

安装libzip 不然会报错
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
wget https://nih.at/libzip/libzip-1.2.0.tar.gz
tar -zxvf libzip-1.2.0.tar.gz
cd libzip-1.2.0
./configure
make && make install

错误信息:configure: error: off_t undefined; check your library configuration
#解决方法
# 添加搜索路径到配置文件
echo '/usr/local/lib64
/usr/local/lib
/usr/lib
/usr/lib64'>>/etc/ld.so.conf
# 更新配置
ldconfig -v

#解决方法:手动复制过去
cp /usr/local/lib/libzip/include/zipconf.h /usr/local/include/zipconf.h

php7.3 安装配置
1
2
3
4
5
6
7
8
9
10
11
12
13
php下载地址:https://www.php.net/distributions/php-7.3.7.tar.gz

wget https://www.php.net/distributions/php-7.3.7.tar.gz

tar -zxvf php-7.3.7.tar.gz

cd php-7.3.7

./configure --prefix=/usr/local/php7 --with-config-file-path=/usr/local/php7/etc --with-gd --with-jpeg-dir --with-png-dir --with-zlib --with-freetype-dir --with-libxml-dir --enable-shared --with-iconv --without-pdo-sqlite --with-gettext=/usr --enable-soap --with-curl --enable-mbregex --enable-fpm --with-fpm-user=www --with-fpm-group=www --enable-mbstring --with-mhash --enable-pcntl --enable-sockets --enable-dom --with-xsl --enable-opcache --with-openssl --enable-simplexml --enable-zip --enable-shmop --enable-ftp --enable-bcmath --with-pdo_mysql --with-mysqli=mysqlnd

make -j 4

make install
安装php7错误信息总结
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
configure: error: libxml2 not found. Please check your libxml2 installation.
yum install -y libxml2-devel

configure: error: Please reinstall the BZip2 distribution
yum install -y bzip2-devel

configure: error: cURL version 7.15.5 or later is required to compile php with cURL support
yum install -y curl-devel

configure: error: jpeglib.h not found.
yum install -y libjpeg-devel

configure: error: png.h not found.
yum install -y libpng-devel

configure: error: freetype-config not found.
yum install -y freetype-devel

configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution
yum install -y libxslt-devel

configure: error: Please reinstall the libzip distribution
yum install -y libzip-devel
阅读全文 »

centos6 和 7 服务进程关闭

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
服务名称	        功能	                            		默认 	建议 	备注说明
NetworkManager 用于自动连接网络,常用在Laptop上 开启 关闭 对服务器无用
abrt-ccpp 开启 自定 对服务器无用
abrt-oops 开启 自定 对服务器无用
abrtd 开启 自定 对服务器无用
acpid 电源的开关等检测管理,常用在Laptop上 开启 自定 对服务器无用
atd 在指定时间执行命令 开启 关闭 如果用crond,则可关闭它
auditd 审核守护进程 开启 开启 如果用selinux,需要开启它
autofs 文件系统自动加载和卸载 开启 自定 只在需要时开启它,可以关闭
avahi-daemon 本地网络服务查找 开启 关闭 对服务器无用
bluetooth 蓝牙无线通讯 开启 关闭 对服务器无用
certmonger 关闭 关闭
cpuspeed 调节cpu速度用来省电,常用在Laptop上 开启 关闭 对服务器无用
crond 计划任务管理 开启 开启 常用,开启
cups 通用unix打印服务 开启 关闭 对服务器无用
dnsmasq dns cache 关闭 关闭 DNS缓存服务,无用
firstboot 系统安装后初始设定 关闭 关闭
haldaemon 硬件信息收集服务 开启 开启
ip6tables ipv6防火墙 开启 关闭 用到ipv6网络的就用,一般关闭
iptables ipv4防火墙 开启 开启 ipv4防火墙服务
irqbalance cpu负载均衡 开启 自定 多核cup需要
kdump 硬件变动检测 关闭 关闭 服务器无用
lvm2-monitor lvm监视 开启 自定 如果使用LVM逻辑卷管理就开启
matahari-broker 关闭 关闭 此服务不清楚,我关闭
matahari-host 关闭 关闭 此服务不清楚,我关闭
matahari-network 关闭 关闭 此服务不清楚,我关闭
matahari-service 关闭 关闭 此服务不清楚,我关闭
matahari-sysconfig 关闭 关闭 此服务不清楚,我关闭
mdmonitor 软raid监视 开启 自定
messagebus 负责在各个系统进程之间传递消息 开启 开启 如停用,haldaemon启动会失败
netconsole 关闭 关闭
netfs 系统启动时自动挂载网络文件系统 开启 关闭 如果使用nfs服务,就开启
network 系统启动时激活所有网络接口 开启 开启 网络基础服务,必需!
nfs 网络文件系统 关闭 关闭 nfs文件服务,用到就开启
nfslock nfs相关 开启 关闭 nfs相关服务,用到就开启
ntpd 自动对时工具 关闭 自定 网络对时服务,用到就开启
ntpdate 自动对时工具 关闭 关闭
oddjobd 与D-BUS相关 关闭 关闭
portreserve RPC 服务相关 开启 自定 可以关闭
postfix 替代sendmail的邮件服务器 开启 自定 如果无邮件服务,可关闭
psacct 负荷检测 关闭 关闭 可以关闭
qpidd 消息通信 开启 开启
quota_nld 关闭 关闭 可以关闭
rdisc 自动检测路由器 关闭 关闭
restorecond selinux相关 关闭 关闭 如果开启了selinux,就需开启
rpcbind 开启 开启 关键的基础服务,nfs服务和桌面环境都依赖此服务!相当于CentOS 5.x里面的portmap服务。
rpcgssd NFS相关 开启 关闭 NFS相关服务,可选
rpcidmapd RPC name to UID/GID mapper 开启 关闭 NFS相关服务,可选
rpcsvcgssd NFS相关 关闭 关闭 NFS相关服务,可选
rsyslog 提供系统的登录档案记录 开启 开启 系统日志关键服务,必需!
saslauthd sasl认证服务相关 关闭 关闭
smartd 硬盘自动检测守护进程 关闭 关闭
spice-vdagentd 开启 开启
sshd ssh服务端,可提供安全的shell登录 开启 开启 SSH远程登录服务,必需!
sssd 关闭 关闭
sysstat 开启 开启 一组系统监控工具的服务,常用
udev-post 设备管理系统 开启 开启
wdaemon 关闭 关闭
wpa_supplicant 无线认证相关 关闭 关闭
ypbind network information service客户端 关闭 关闭
阅读全文 »

keepalived+lvs+nginx(DR)

keepalived+lvs 工作原理

1
说起lvs,不得不说说关于lvs的工作原理,通常来说lvs的工作方式有三种:nat模式(LVS/NAT),直接路由模式( LVS/DR),ip隧道模式(LVS/TUN),不过据说还有第四种模式(FULL NAT),下面我们来介绍介绍关于lvs常用的三种工作模式说明

LVS负载均衡模式—NAT模式原理

1
LVS-NAT模式:NAT用法本来是因为网络IP地址不足而把内部保留IP地址通过映射转换成公网地址的一种上网方式(原地址NAT)如果把NAT的过程稍微变化,就可以 成为负载均衡的一种方式原理其实就是把从客户端发来的IP包的IP头目的地址在DR上换成其中一台REALSERVER的IP地址并发至此 REALSERVER,而REALSERVER则在处理完成后把数据经过DR主机发回给客户端,DR在这个时候再把数据包的原IP地址改为DR接口上的 IP地址即可期间,无论是进来的流量,还是出去的流量,都必须经过DR

如下为lvs nat模式的示意说明图:

DR(路由)

1
LVS-DR模式:每个Real Server上都有两个IP:VIP和RIP,但是VIP是隐藏的,就是不能提高解析等功能,只是用来做请求回复的源IP的,Director上只需要一个网卡,然后利用别名来配置两个IP:VIP和DIP,在DIR接收到客户端的请求后,DIR根据负载算法选择一台rs sever的网卡mac作为客户端请求包中的目标mac,通过arp转交给后端rs serve处理,后端再通过自己的路由网关回复给客户端

如下为lvs tun模式的示意说明图:

阅读全文 »