当前位置: 移动技术网 > 科技>操作系统>Linux > K8S搭建过程随笔

K8S搭建过程随笔

2019年09月19日  | 移动技术网科技  | 我要评论

  组件

kubernetes 1.14.2

docker 18.09.6-ce

etcd 3.3.13

flanneld 0.11.0

  基础环境设置

192.168.11.188 k8s-master

192.168.11.189 k8s-node1
192.168.11.190 k8s-node2

  设置主机名:

hostnamectl set-hostname k8s-master

hostnamectl set-hostname k8s-node1

hostnamectl set-hostname k8s-node2

  在master主机添加host

cat >> /etc/hosts <<eof
192.168.11.189 k8s-node1
192.168.11.190 k8s-node2
eof

  免密登录

ssh-keygen -t rsa

ssh-copy-id root@k8s-node1

ssh-copy-id root@k8s-node2

  在所有环境中安装依赖包

yum install -y epel-release conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget unzip net-tools

  ## epel-release 自动配置yum的软件仓库

  ## conntrack 允许系统管理员从用户空间与内核中的连接跟踪系统进行交互,该系统是为iptables启用状态包检测的模块。

  ## ntpdate 同步更新时间

  ## ntp 网络时间协议

  ## ipvsadm 工作在用户空间,负责为ipvs内核框架编写规则,定义谁是集群服务

  ## ipset ipset是iptables的扩展,它允许你创建 匹配整个地址集合的规则。

  ## jq 直接在命令行下对json进行操作,包括分片、过滤、转换等

  ## iptables 管理防火墙安全框架的命令行工具

  ##curl 利用url语法在命令行下工作的文件传输工具

  ## sysstat 提供linux性能监控的工具集,包括sar、sadf、mpstat、iostat、pidstat等,监控系统性能和使用情况。

  ## libseccomp ibseccomp库为linux内核的系统调用过滤机制提供了一个易于使用,独立于平台的接口:seccomp。

  ## wget 下载工具

  ## unzip 解压工具

  ## net-tools  netstat命令不可用时,安装net-tools

  关闭防火墙

systemctl stop firewalld
systemctl disable firewalld
iptables -f && iptables -x && iptables -f -t nat && iptables -x -t nat
iptables -p forward accept

  关闭swap分区  

swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

  关闭selinux

setenforce 0

sed -i 's/^selinux=.*/selinux=disabled/' /etc/selinux/config

  加载内核并优化

modprobe ip_vs_rr
modprobe br_netfilter
cat > kubernetes.conf <<eof
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0 # 禁止使用 swap 空间,只有当系统 oom 时才允许使用它
vm.overcommit_memory=1 # 不检查物理内存是否够用
vm.panic_on_oom=0 # 开启 oom
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
eof
cp kubernetes.conf /etc/sysctl.d/kubernetes.conf
sysctl -p /etc/sysctl.d/kubernetes.conf

  ntp

ntpdate ntp1.aliyun.com #同步阿里云时间

  创建相关目录

mkdir -p /opt/k8s/{bin,work} /etc/{kubernetes,etcd}/cert

  升级内核

rpm -uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
# 安装完成后检查 /boot/grub2/grub.cfg 中对应内核 menuentry 中是否包含 initrd16 配置,如果没有,再安装一次!
yum --enablerepo=elrepo-kernel install -y kernel-lt
# 设置开机从新内核启动
grub2-set-default 0

  设置配置参数脚本

#!/usr/bin/bash

# 生成 encryptionconfig 所需的加密 key
export encryption_key=$(head -c 32 /dev/urandom | base64)

# 集群各机器 ip 数组
export node_ips=(192.168.11.188 192.168.11.189 192.168.11.190)

# 集群各 ip 对应的主机名数组
export node_names=(k8s-master k8s-node1 k8s-node2)

# etcd 集群服务地址列表
export etcd_endpoints="https://192.168.11.188:2379"

# etcd 集群间通信的 ip 和端口
export etcd_nodes="k8s-master=https://192.168.11.188:2380"

# kube-apiserver 的反向代理(kube-nginx)地址端口
export kube_apiserver="https://127.0.0.1:8443"

# 节点间互联网络接口名称
export iface="ens33"

# etcd 数据目录
export etcd_data_dir="/data/k8s/etcd/data"

# etcd wal 目录,建议是 ssd 磁盘分区,或者和 etcd_data_dir 不同的磁盘分区
export etcd_wal_dir="/data/k8s/etcd/wal"

# k8s 各组件数据目录
export k8s_dir="/data/k8s/k8s"

# docker 数据目录
export docker_dir="/data/k8s/docker"

## 以下参数一般不需要修改

# tls bootstrapping 使用的 token,可以使用命令 head -c 16 /dev/urandom | od -an -t x | tr -d ' ' 生成
bootstrap_token="4498a43c27ef382031e642587615ee63"

# 最好使用 当前未用的网段 来定义服务网段和 pod 网段

# 服务网段,部署前路由不可达,部署后集群内路由可达(kube-proxy 保证)
service_cidr="10.254.0.0/16"

# pod 网段,建议 /16 段地址,部署前路由不可达,部署后集群内路由可达(flanneld 保证)
cluster_cidr="172.30.0.0/16"

# 服务端口范围 (nodeport range)
export node_port_range="30000-32767"

# flanneld 网络配置前缀
export flannel_etcd_prefix="/kubernetes/network"

# kubernetes 服务 ip (一般是 service_cidr 中第一个ip)
export cluster_kubernetes_svc_ip="10.254.0.1"

# 集群 dns 服务 ip (从 service_cidr 中预分配)
export cluster_dns_svc_ip="10.254.0.2"

# 集群 dns 域名(末尾不带点号)
export cluster_dns_domain="cluster.local"

# 将二进制目录 /opt/k8s/bin 加到 path 中
export path=/opt/k8s/bin:$path

   将文件发送到所有节点

source environment.sh
for node_ip in ${node_ips[@]}
do
echo ">>> ${node_ip}"
scp environment.sh root@${node_ip}:/opt/k8s/bin/
ssh root@${node_ip} "chmod +x /opt/k8s/bin/*"
done

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网