Kubernetes安装搭建
一、通过二进制文件工具安装
本例还是部署3个节点,1Master 2 Node。
1.准备工作
1.1 下载安装包
Kubernetes 二进制文件的下载地址为:
https://github.com/kubernetes/kubernetes/releases
K8s 将二进制包分为 Client Binaries 、 Server Binaries 以及 Node Binaries ,分别为 客户端二进制包、Master节点二进制包以及Node节点二进制包。
本例,我们在CentOS上安装,需要下载kubernetes-server-linux-amd64.tar.gz、kubernetes-node-linux-amd64.tar.gz 以及 kubernetes-client-linux-amd64.tar.gz 【可不单独下载】,路径通常为/opt。
cd /opt
wget https://dl.k8s.io/v1.13.4/kubernetes-server-linux-amd64.tar.gz
wget https://dl.k8s.io/v1.13.4/kubernetes-node-linux-amd64.tar.gz
下载etcd 二进制文件
wget https://github.com/etcd-io/etcd/releases/download/v3.3.12/etcd-v3.3.12-linux-amd64.tar.gz
###1.2 关闭防火墙和SELinux
所有节点:
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
编辑/etc/selinux/config
SELINUX=disabled
1.3 禁用交换分区
所有节点禁用CentOS交换分区
swapoff -a && sysctl -w vm.swappiness=0
修改/etc/fstab,将交换分区对应文件系统注释
#/dev/mapper/centos-swap swap swap defaults 0 0
1.4 设置Docker所需要的网络参数
Docker只装在node上,node上修改/etc/sysctl.d/k8s.conf ,增加:
net.ipv4.ip_forward=1
执行:
sysctl -p /etc/sysctl.d/k8s.conf
###1.5 配置Docker的yum安装源
对于我们有artifactory这种制品仓库,可以使用artifactory的rpm 源/ docker 源等等。
假设默认CentOs上没有Docker的yum源,使用以下命令添加:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
用yum-config-manager来管理和配置CentOS的软件仓库。如果没有,则用以下命令安装:
yum install yum-utils
1.6安装Docker
设置好软件源,就可以yum安装Docker CE:
yum install docker-ce
启动:
systemctl enable docker
systemctl start docker
###1.7 创建安装目录
将K8s安装在/k8s目录中,先创建几个相关目录
mkdir -p /k8s/etcd/bin /k8s/etcd/cfg
mkdir -p /k8s/kubernetes/bin /k8s/kubernetes/cfg /k8s/kubernetes/ssl
2.部署etcd
解压前面下载的etcd-v3.3.12-linux-amd64.tar.gz:
tar -xvf etcd-v3.3.12-linux-amd64.tar.gz
然后复制etcd和etcdctl到/k8s/etcd/bin
cp etcd-v3.3.12-linux-amd64/etcd etcd-v3.3.12-linux-amd64/etcdctl /k8s/etcd/bin/
配置etcd 。需要在3个主机上创建etcd配置文件,区别仅仅在于IP地址。
Master节点
vi /k8s/etcd/cfg/etcd
#内容如下
# [Member]
ETCD_NAME="etcd01"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.1.121:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.1.121:2379"
# [Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.1.121:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.1.121:2379"
ETCD_INITAL_CLUSTER="etcd01=http://192.168.1.121:2380,etcd02=http://192.168.1.122:2380,etcd3=http://192.168.1.123:2380"
ETCD_INITAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITAL_CLUSTER_STATE="new"
接下来是Node 1节点,创建配置文件:
vim /k8s/etcd/cfg/etcd
内容如下:
# [Member]
ETCD_NAME="etcd02"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.1.122:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.1.122:2379"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.1.122:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.1.122:2379"
ETCD_INITIAL_CLUSTER="etcd01=http://192.168.1.121:2380,etcd02=http://192.168.1.122:2380,etcd03=http://192.168.1.123:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
Node 2 参照以上配置。
然后创建etcd的系统服务单元文件,由于在3个节点中,etcd的安装位置完全相同,所以3个节点的etcd系统服务单元文件完全相同。
所有节点上执行:
vim /lib/systemd/system/etcd.service
内容如下:
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
EnvironmentFile=/k8s/etcd/cfg/etcd
ExecStart=/k8s/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
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
最后在3个节点启动etcd服务
systemctl enable etcd
systemctl start etcd
配置完成后,验证集群是否正常
/k8s/etcd/bin/etcdctl cluster-health
TIPS: 启动集群时需要同时启动所有的节点。
3.部署flannel网络
在两个Node节点上下载flannel的二进制文件:
https://github.com/coreos/flannel/releases
下载后的文件名为:etcd-v3.3.12-linux-amd64.tar.gz
tar zxvf 解压
将解压的flanneld和mk-docker-opts.sh复制到/k8s/kubernetes/bin/
cp flanneld mk-docker-opts.sh /k8s/kubernetes/bin/
创建flannel 配置文件/k8s/kubernetes/cfg/flanneld
FLANNEL_OPTIONS="--etcd-endpoints=http://192.168.1.121:2379,http://192.168.1.122:2379,http://192.168.1.123:2379"
在etcd集群中写入Pod网络信息
/k8s/etcd/bin/etcdctl set /coreos.com/network/config '{ "Network": "172.18.0.0/16", "Backend":{"Type": "vxlan"}}'
创建flannel的系统服务单元文件/lib/systemd/system/flanneld.service
[Unit]
Description=Flanneld overlay address etcd agent
After=network-online.target network.target
Before=docker.service
[Service]
Type=notify
EnvironmentFile=/k8s/kubernetes/cfg/flanneld
ExecStart=/k8s/kubernetes/bin/flanneld --ip-masq $FLANNEL_OPTIONS
ExecStartPost=/k8s/kubernetes/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/subnet.env
Restart=on-failure
[Install]
WantedBy=multi-user.target
启动flannel服务
systemctl enable flanneld
systemctl start flanneld