一,安装环境
1,硬件要求
内存:2GB或更多RAM
CPU: 2核CPU或更多CPU
硬盘: 30GB或更多
2,本次环境说明:
操作系统:CentOS 7.9
内核版本:3.10.0-1160
虚拟机 | IP地址 | 节点 |
k8s-master | 192.168.1.20 | master |
k8s-node-1 | 192.168.1.25 | worker |
k8s-node-2 | 192.168.1.26 | worker |
二,环境前期准备工作(三台机器同步执行)
1,防火墙关闭
systemctl stop firewalld && systemctl disable firewalld
2,selinux关闭
sed -i 's/enforcing/disabled/' /etc/selinux/config && setenforce 0
shutdown -r now重启机器
3,关闭swap
sed -ri 's/.*swap.*/#&/' /etc/fstab
4,设置主机名
在三台主机分别执行:
hostnamectl set-hostname k8s-master && bash
hostnamectl set-hostname k8s-node-1 && bash
hostnamectl set-hostname k8s-node-2 && bash
5,修改hosts文件
添加三台主机的地址及主机名
6,开启包转发功能和修改内核参数
modprobe br_netfilter
echo "modprobe br_netfilter" >> /etc/profile
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
7,配置生效
sysctl -p /etc/sysctl.d/k8s.conf
8,时间同步
yum install ntpdate -y
ntpdate cn.pool.ntp.org
echo "* */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org >> /tmp/tmp.txt" >> /var/spool/cron/root
service crond restart
9,安装基础软件包
yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate telnet ipvsadm openssh-clients
10,安装docker
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce-20.10.7-3.el7
systemctl start docker && systemctl enable docker
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://k73dxl89.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
systemctl daemon-reload && systemctl restart docker
三,k8s安装
1,备份原repo文件,替换阿里云yum源(三台机器上执行)
mkdir /root/repo.bak
mv /etc/yum.repos.d/* /root/repo.bak/
cd /etc/yum.repos.d/
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
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
EOF
yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6
systemctl enable kubelet
2,使用kubeadm初始化k8s集群(master节点上执行)
kubeadm config print init-defaults > kubeadm.yaml
根据我们自己的需求修改配置,比如修改 imageRepository 的值,kube-proxy 的模式为 ipvs,初始化节点的时候需要指定cgroupDriver为systemd
kubeadm.yaml配置如下:
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.1.20 #控制节点的ip
bindPort: 6443
nodeRegistration:
criSocket: /var/run/dockershim.sock
name: k8s-master #控制节点主机名
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
type: CoreDNS
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.20.6
networking:
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12
podSubnet: 10.244.0.0/16 #指定pod网段
scheduler: {}
#追加如下几行
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
3,基于kubeadm.yaml文件初始化k8s
kubeadm init --config=kubeadm.yaml --ignore-preflight-errors=SystemVerification
看到此段证明安装成功;
根据提示执行以下命令:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
4,添加node工作节点(node节点上执行)
kubeadm join 192.168.1.20:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:ae0f981397b883bf2a51f7ce80a333f1cf1cd4f9a1bf8b485cdc74d1de1773f7
5,安装calico.yaml网络组件(master上执行)
wget -O https://docs.projectcalico.org/manifests/calico.yaml
kubectl apply -f calico.yaml
kubectl get nodes -owide
四,愿为江水,与君相逢
到此k8s 单master多node集群就安装完成了,如有问题或遗漏请留言指正。
谨以此文记录我们学习kubernetes的经历,希望能认识更多志同道合的朋友,一起分享遇到的问题和学习经验。