一、环境说明:
集群角色 | 主机名 | IP | 组件 |
---|---|---|---|
控制节点 | master01 | 10.168.1.61 | api-server、controller-manager、scheduler、kubelet、etcd、docker、kube-proxy、keepalived、nginx、calico |
控制节点 | master02 | 10.168.1.62 | api-server、controller-manager、scheduler、kubelet、etcd、docker、kube-proxy、keepalived、nginx、calico |
控制节点 | master03 | 10.168.1.63 | api-server、controller-manager、scheduler、kubelet、etcd、docker、kube-proxy、keepalived、nginx、calico |
工作节点 | node01 | 10.168.1.64 | node03 kubelet、kube-proxy、docker、calico、coredns |
VIP | 10.168.1.65 |
三、K8S安装
3.1 环境初始化(以下步骤每个节点都要操作)
3.1.1 配置每个节点的主机名
# 在master01上执行如下:
hostnamectl set-hostname master01 && bash
# 在node01上执行如下:
hostnamectl set-hostname node01 && bash
# 在node02上执行如下:
hostnamectl set-hostname node02 && bash
# 在node03上执行如下:
hostnamectl set-hostname node03 && bash
3.1.2 配置主机hosts文件,相互之间通过主机名互相访问
修改每台机器的/etc/hosts文件,增加如下三行:
172.16.31.156 master01
172.16.31.159 node01
172.16.31.160 node02
172.16.31.161 node03
3.1.3 配置主机之间无密码登录
ssh-keygen #一路回车,不输入密码
把本地生成的密钥文件和私钥文件拷贝到远程主机
ssh-copy-id master01
ssh-copy-id node01
ssh-copy-id node02
ssh-copy-id node03
3.1.4 关闭交换分区swap,提升性能
swapoff -a
sed -i 's/.*swap/#&/' /etc/fstab
3.1.5 修改机器内核参数
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
sysctl -p /etc/sysctl.d/k8s.conf
3.1.6 关闭防火墙和selinux
systemctl stop firewalld ; systemctl disable firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
3.1.7 配置源
配置base源和docker源为内部源
配置k8s使用外部源(内部源没同步)
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
3.1.8 配置时间同步
备注:在初始化源的时候时间同步已自动配置,此处不在单独配置
3.1.9 开启IPVS
cat >>/etc/sysconfig/modules/ipvs.modules<<EOF
#!/bin/bash
ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack"
for kernel_module in ${ipvs_modules}; do
/sbin/modinfo -F filename ${kernel_module} > /dev/null 2>&1
if [ 0 -eq 0 ]; then
/sbin/modprobe ${kernel_module}
fi
done
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs
ip_vs_ftp 13079 0
nf_nat 26583 1 ip_vs_ftp
ip_vs_sed 12519 0
ip_vs_nq 12516 0
ip_vs_sh 12688 0
ip_vs_dh 12688 0
3.1.10 安装软件包
yum install -y ipvsadm wget net-tools nfs-utils vim docker-ce-20.10.* bash-comp* docker-ce-cli-20.10.*
3.1.11 配置docker镜像加速
mkdir /etc/docker
cat<<EOF>>/etc/docker/daemon.json
{
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"],
"insecure-registries": ["https://harbor.streamcomputing.com"],
"exec-opts":
["native.cgroupdriver=systemd"]
}
EOF
修改docker文件驱动为systemd,默认为cgroupfs,kubelet默认使用systemd,两者必须一致才可以。
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
3.2 安装
3.2.1 安装初始化k8s需要的软件包(所有节点都要安装)
yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
systemctl enable kubelet && systemctl start kubelet
3.2.3 kubeadm初始化k8s集群(指在master节点操作)
在master1上创建kubeadm-config.yaml文件:
vim kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.23.6
controlPlaneEndpoint: 172.16.31.155:16443
imageRepository: registry.aliyuncs.com/google_containers
apiServer:
certSANs:
- 172.16.31.156
- 172.16.31.159
- 172.16.31.160
- 172.16.31.161
- 172.16.31.155
networking:
podSubnet: 10.244.0.0/16
serviceSubnet: 10.10.0.0/16
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
3.2.4 初始化k8s集群
kubeadm init --config kubeadm-config.yaml --image-repository registry.aliyuncs.com/google_containers
没有报错才安装成功
配置kubectl的配置文件config,相当于对kubectl进行授权,这样kubectl命令可以使用这个证书对k8s集群进行管理
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3.2.5 加入node节点
看加入节点的命令:
kubeadm token create --print-join-command
在node节点上运行如下命令加入集群节点
kubeadm join 172.16.31.155:16443 --token o8z030.r3f2sdxeoxfh0zi8 --discovery-token-ca-cert-hash sha256:9f21a3ef77d1c00ea67594d50d9980d4c2085ba8dfd3d139cc4cbb4fb61df52a
没有报错则加入成功
此时看看节点状态
kubectl get nodes
NAME STATUS ROLES AGE VERSION
master01 NotReady control-plane,master 53m v1.23.6
node01 NotReady <none> 59s v1.23.6
node02 NotReady <none> 59s v1.23.6
node03 NotReady <none> 59s v1.23.6
3.2.6 安装calico网络组件
kubectl apply -f https://git.cnbugs.com/kubernetes/other/raw/branch/ddpss/calico.yaml
再次查看节点状态
文档更新时间: 2023-03-30 09:10 作者:admin