使用kubeadm快速部署一个kubernetes集群

Kubeadm 是一个创建和管理 Kubernetes 集群的工具。

1、安装需求

  • 一台或多台运行着下列系统的机器:
    • Ubuntu 16.04+
    • Debian 9+
    • CentOS 7
    • Red Hat Enterprise Linux (RHEL) 7
    • Fedora 25+
    • HypriotOS v1.0.1+
    • Container Linux (测试 1800.6.0 版本)
  • 每台机器 2 GB 或更多的 RAM (如果少于这个数字将会影响您应用的运行内存)
  • 2 核 CPU 或更多,硬盘30GB或更多。
  • 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)
  • 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。
  • 禁用交换分区。

2、准备开始

我用 VMware 创建了三台 Centos7 虚拟机,每台虚拟机添加了两块网卡,一块网卡用于集群内部之间的通信,一块网卡用于连接到互联网下载软件和拉取镜像。内网 IP 规划如下:

角色 IP
k8s-master 192.168.66.10
k8s-node01 192.168.66.20
k8s-node02 192.168.66.21

3、系统初始化

  • 关闭防火墙
# systemctl stop firewalld && systemctl disable firewalld
  • 关闭 swap
 # swapoff -a && sed -i '/ swap / s/^(.*)$/#1/g' /etc/fstab
  • 关闭 selinux
 # setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/
  • 设置 hostname
 # hostnamectl  set-hostname  k8s-master
  • 添加 hosts
# cat >> /etc/hosts << EOF
192.168.66.10 k8s-master
192.168.66.20 k8s-node1
192.168.66.21 k8s-node2
EOF
  • 调整内核参数
 # cat > /etc/sysctl.d/kubernetes.conf <<EOF
 net.bridge.bridge-nf-call-iptables=1    
 net.bridge.bridge-nf-call-ip6tables=1    
 EOF
 
 # sysctl -p /etc/sysctl.d/kubernetes.conf    
  • 开启 ipvs
modprobe用来加载或移除内核模块
# modprobe br_netfilter

# cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF

# chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv

4、Docker/Kubeadm/Kubelet/Kubectl的部署安装

4.1、安装 Docker

添加阿里YUM源
# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# yum update -y && yum install -y docker-ce

配置镜像仓库
# cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF

重启docker
systemctl daemon-reload && systemctl restart docker && systemctl enable docker

4.2、安装Kubeadm、Kubectl、Kubelet

添加阿里云yum软件源
# cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
# systemctl enable kubelet

5、主节点集群初始化

# kubeadm init 
  --apiserver-advertise-address=192.168.66.10 
  --image-repository registry.aliyuncs.com/google_containers 
  --kubernetes-version v1.18.0 
  --service-cidr=10.96.0.0/12 
  --pod-network-cidr=10.244.0.0/16
  • --apiserver-advertise-address:主节点IP
  • --image-repository registry.aliyuncs.com/google_containers:默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
  • --service-cidr=10.96.0.0/12:service的clusterIP地址范围
  • --pod-network-cidr=10.244.0.0/16:pod的IP地址范围,后面我们会安装网络插件Calico,10.244.0.0/16为Calico默认地址,这里设置和Calico保持一致

初始化完成后,会有如下日志提示,安装提示执行命令

# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/config

 5.1、为 kube-proxy 开启 ipvs

# kubectl edit cm kube-proxy -n kube-system

把其中的 mode 改为 ipvs

......
    kind: KubeProxyConfiguration
    metricsBindAddress: ""
    mode: "ipvs"
    nodePortAddresses: null
    oomScoreAdj: null
    portRange: ""
......
# kubectl get pod -n kube-system | grep kube-proxy |awk '{system("kubectl delete pod "$1" -n kube-system")}'

6、加入节点

在节点上执行,主节点 kubeadm init 后打印的 kubeadm join 命令

# kubeadm join 192.168.66.10:6443 --token esce21.q6hetwm8si29qxwn 
    --discovery-token-ca-cert-hash sha256:00603a05805807501d7181c3d60b478788408cfe6cedefedb1f97569708be9c5

如果忘了 token 或者 token 过期不可用了,可执行如下命令重新生成

# kubeadm token create
# kubeadm token list
# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
63bca849e0e01691ae14eab449570284f0c3ddeea590f8da988c07fe2729e924

# kubeadm join 192.168.66.10:6443 --token nuja6n.o3jrhsffiqs9swnu --discovery-token-ca-cert-hash sha256:63bca849e0e01691ae14eab449570284f0c3ddeea590f8da988c07fe2729e924

7、安装 Calico 网络插件

先把资源清单下载下来

# wget https://docs.projectcalico.org/manifests/calico.yaml

修改如下配置

  • CALICO_IPV4POOL_CIDR:根据主节点初始化修改Pod CIDR
  • CALICO_IPV4POOL_IPIP:选择 IPIP 工作模式
......
           - name: CALICO_IPV4POOL_CIDR
              value: "10.244.0.0/16"
......
            # Enable IPIP
            - name: CALICO_IPV4POOL_IPIP
              value: "Always"

8、测试集群

查看节点,Calico 安装成功后,master 的状态会变成 Ready

节点成功加入,节点状态是 Ready

# kubectl get nodes
NAME     STATUS     ROLES    AGE     VERSION
master   Ready      master   3d20h   v1.18.1
node01   NotReady   <none>   3d20h   v1.18.0
node02   NotReady   <none>   3d14h   v1.18.0

创建一个 deployment

# kubectl create deployment nginx --image=nginx
# kubectl expose deployment nginx --port=80
# kubectl get pod,svc

查看服务是否能访问
curl Cluster-Ip
原文地址:https://www.cnblogs.com/wufj/p/14214021.html