k8s-部署 Kubernetes 集群(kubeadm方式)

 机器准备

IP 主机名 角色 配置 安装组件
192.168.198.150 master-1 master 2U2G

master组件 etcd kubectl

192.168.198.151 master-2 master 2U2G master组件 etcd kubectl
192.168.198.152 master-3 master 2U2G master组件 etcd kubectl
192.168.198.153 node-1 worker 2U2G worker组件
192.168.198.154 node-2 worker 2U2G worker组件
192.168.198.155 node-3 worker 2U2G worker组件

 

二 环境准备(所有节点)

 所有机器关闭防火墙 selinux swap分区

 所有机器做好相互解析 时间同步

 可在master-1节点上生成密钥对 并将公钥拷贝至其他节点 方便通信与传输文件

#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

#关闭selinux
setenforce 0
sed -ri "s/(^SELINUX=)(.*)/\1disabled/" /etc/selinux/config

#关闭swap分区
swapoff -a
sed -i.bak 's/^.*swap/#&/' /etc/fstab

#相互解析
[root@localhost ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.198.150 master-1
192.168.198.151 master-2
192.168.198.152 master-3
192.168.198.153 node-1
192.168.198.154 node-2
192.168.198.155 node-3

#时间同步略 
#建议用master节点上的一台服务器同步外网时间 其他节点服务器同步这台服务器时间

 配置内核参数

[root@localhost ~]# cat /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
[root@localhost ~]# sysctl --system

 加载ipvs模块

[root@localhost ~]# yum -y install ipset ipvsadm
[root@localhost ~]# cat /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
[root@localhost ~]# chmod +x /etc/sysconfig/modules/ipvs.modules
[root@localhost ~]# /etc/sysconfig/modules/ipvs.modules

 

三 安装docker(所有节点)

 下载docker

#下载docker源
cd /etc/yum.repos.d/
curl -O http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#下载docker(本次下载18.06版本)
#可用 yum list docker-ce --showduplicates 查看可下载版本
yum -y install docker-ce-18.06.0.ce

 配置docker

[root@localhost ~]# mkdir /etc/docker
[root@localhost ~]# cat /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
},
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ],
  #下为镜像加速器 可不写 也可加入自己的镜像加速器地址
  "registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}
[root@localhost ~]# systemctl enable docker --now

 

四 安装kubelet(所有节点)

 下载k8s源

[root@localhost ~]# cat /etc/yum.repos.d/kubernetes.repo
[kubernetes] name
=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

  下载kubeadm  kubelet  kubectl  ipvsadm(前三版本要一致 不然容易出错 ipvsadm可选择下载)

#查看可下载版本
yum list --showduplicates|egrep kubeadm

#下载1.18.0版本
yum install -y kubeadm-1.18.0-0 kubelet-1.18.0-0 kubectl-1.18.0-0 ipvsadm

#先将kubelet设为开机自启(还没配网络 起不来)
systemctl enable kubelet

 

五 安装负载均衡(master节点)(单master无需部署)

 在master上安装kube-apiserver kube-scheduler kube-controller-manager

 kube-scheduler 和 kube-controller-manager 可以以集群模式运行 通过 leader 选举产生一个工作进程 其它进程处于阻塞模式

 kube-apiserver可以运行多个实例 但对其它组件需要提供统一的访问地址 该地址需要高可用

 创建 haproxy 启动脚本并启动

#!/bin/bash
MasterIP1=192.168.198.150
MasterIP2=192.168.198.151
MasterIP3=192.168.198.152
MasterPort=6443                   # apiserver端口

docker run -d --restart=always --name haproxy-k8s -p 6444:6444 \
           -e MasterIP1=$MasterIP1 \
           -e MasterIP2=$MasterIP2 \
           -e MasterIP3=$MasterIP3 \
           -e MasterPort=$MasterPort  wise2c/haproxy-k8s

 创建keepalived 启动脚本并启动

#!/bin/bash
VIRTUAL_IP=192.168.122.100         # VIP
INTERFACE=eth0                     # 网卡名称
NETMASK_BIT=24
CHECK_PORT=6444                   # Haproxy端口
RID=10
VRID=160
MCAST_GROUP=224.0.0.18
docker run -itd --restart=always --name=keepalived-k8s \
           --net=host --cap-add=NET_ADMIN \
           -e VIRTUAL_IP=$VIRTUAL_IP \
           -e INTERFACE=$INTERFACE \
           -e NETMASK_BIT=$NETMASK_BIT \
           -e CHECK_PORT=$CHECK_PORT \
           -e RID=$RID -e VRID=$VRID \
           -e MCAST_GROUP=$MCAST_GROUP  wise2c/keepalived-k8s

 测试

  创建成功后在每台master节点上查看容器是否正常运行

  查看每台master节点上的6444端口是否被监听

  在有VIP的机器关闭haproxy容器或keepalived容器看看VIP能否正常漂移

 

六 初始化master(master-1)

 创建初始化配置文件

#创建配置文件目录
mkdir k8s
cd k8s/

#生成配置文件
kubeadm config print init-defaults > init.yml

 根据实际环境修改初始化配置文件

apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.198.150    #改为本机IP
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: master-1
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: "192.168.122.100:6444"   # 添加 VIP:PORT
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers  # 使用国内镜像仓库
kind: ClusterConfiguration
kubernetesVersion: v1.18.0    #版本号
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
  podSubnet: 10.244.0.0/16    # 添加 pod子网,和Flannel中要一致
scheduler: {}
#添加下列数据
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs

 初始化master-1

  此过程需要等待几分钟时间 如果中途失败 再次初始化前先执行 kubeadm reset 命令清理 然后再执行init或join操作

kubeadm init --config=init.yml --upload-certs | tee kubeadm-init.log

  成功后记住回显中添加master和node节点的命令(也可到保存的文件中查看)后续需用其添加节点

  第一条为添加master节点 第二条为添加node节点

  token有效期为两小时 过期后可输入命令重新生成

kubeadm init phase upload-certs --upload-certs

 

七 配置kubectl( 无论在master节点或node节点 要能够执行kubectl命令必须进行配置 有两种配置方式 )

 1 通过配置文件(初始化master后的回显)

 2 通过环境变量

echo 'export KUBECONFIG=/etc/kubernetes/admin.conf' >> ~/.bashrc
source ~/.bashrc

 

八 部署网络插件(master-1)

#下载kube-flannel.yml文件 
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

#执行安装
kubectl apply -f kube-flannel.yml

#查看信息(等待)
kubectl get po -n kube-system

 

九 添加节点

 将/etc/kubernetes/admin.conf 这个文件拷贝至你需要操作的机器上

 执行添加节点命令添加相应的节点

posted @ 2020-11-06 13:31  心恩惠动  阅读(123)  评论(0编辑  收藏  举报