一.环境要求
二.脚本安装
1.环境需求
一台或多台机器,操作系统 CentOS7.x-86_x64
硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
更改localhost
master: 192.168.137.100 k8s-master
node1: 192.168.137.101 k8s-node1
node2: 192.168.137.102 k8s-node2
2.创建前置环境脚本k8.sh
在3台主机上都执行(node节点可以不用装apiserver,问题不大)
#!/bin/bash
##########开始设置环境##############
printf "#####################正在配置所有环境变量信息################## "
echo "127.0.0.1 $(hostname)">> /etc/hosts
printf "#######################关闭selinux与防火墙################## "
sed -i ‘s/enforcing/disabled/’ /etc/selinux/config
setenforce 0
systemctl stop firewalld
systemctl disable firewalld
printf "#######################关闭swap############################ "
swapoff -a
sed -ri ‘s/.swap./#&/’ /etc/fstab
printf "######################配置路由转发########################### "
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
echo "net.ipv4.ip_forward = 1">> /etc/stsctl.d/k8s.conf
echo "net.bridge.bridge-nf-call-ip6tables = 1">> /etc/stsctl.d/k8s.conf
echo "net.bridge.bridge-nf-call-iptables = 1">> /etc/stsctl.d/k8s.conf
modprobe br_netfilter
sudo sysctl --system
printf "######################配置ipvs(可安装完毕配置)###################### "
cat <<EOF | sudo tee /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- vf_conntrack_ipv4
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules
sh /etc/sysconfig/modules/ipvs.modules
yum -y install -y ipset ipvsadm
printf "######################安装docker环境######################### "
# 设置 yum repository
sudo yum remove docker
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装并启动 docker
# 不指定版本号则默认安装最新版本
yum install -y docker-ce-19.03.8 docker-ce-cli-19.03.8 containerd.io
systemctl enable docker
systemctl start docker
# 安装 nfs-utils
yum install -y nfs-utils
yum install -y wget
# 设置 docker 镜像,提高 docker 镜像下载速度和稳定性
# 如果您访问 https://hub.docker.io 速度非常稳定,亦可以跳过这个步骤
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
##或者使用阿里云镜像加速器(可以用你们自己的)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://7sbtq6z6.mirror.aliyuncs.com"]
}
EOF
# 重启 docker,并启动 kubelet
systemctl daemon-reload
systemctl restart docker
docker version
printf "######################安装k8部署yum源与k8核心插件######################### "
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
sudo yum makecache
sudo yum install -y kubelet-1.21.0 kubeadm-1.21.0 kubectl-1.21.0
sudo systemctl enable kubelet
sudo systemctl start kubelet
##下载api-server等核心组件
#如果不知道安装k8s版本所安装核心版本可使用 kubeadm config images list查看
sudo tee ./k8s-images.sh << EOF
images={
kube-apiserver:v1.21.14
kube-proxy:v1.21.14
kube-controllor-manager:v1.21.14
kube-scheduler:v1.21.14
coredns:1.8.0
etcd:3.4.13-0
pause:3.4.1
}
for imageName in ${images[@]};do
sudo docker pull registry.aliyuncs.com/google_containers/$imageName
## 阿里镜像下载coredns后的路径k8s中有上层标签目录,需要手动打下标签
sudo docker tag registry.aliyuncs.com/google_containers/coredns:1.8.0 registry.aliyuncs.com/google_containers/coredns/coredns:v1.8.0
done
EOF
chmod +x ./k8s-images.sh && ./k8s-images.sh
初始化master
sudo kubeadm init \
--apiserver-advertise-address=192.168.137.100 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.21.0 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=172.16.0.0/16
提示:
如存在以下ubeadm init报错(docker容器之前运行环境网络api接口占用)
报错:
[ERROR FileContent—proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
[preflight] If you know what you are doing, you can make a check non-fatal with --ignore-preflight-errors=…
To see the stack trace of this error execute with —v=5 or higher
解决方法:
echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables #清理容器之前桥接网络
如下图所示,已使用kubeamd成功安装看k8s核心组件(根据提示配置环境变量)
一共4步:执行就可以了:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
#到这环境变量已经配置完毕
安装pod网络插件(网络插件很多如:ACI、calico、canal、flannel等,这里我们用calico)
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
#接下来就是直接在两台node节点执行上图生成的初始化命令
kubeadm join 192.168.137.100:6443 --token dwlu5p.r3fmmx5qy461j9x9 \
--discovery-token-ca-cert-hash sha256:b24271e586e171908be00d60ad5645646915d4ce2fcc8
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master NotReady control-plane,master 42m v1.21.0
k8s-node1 NotReady <none> 42m v1.21.0
k8s-node2 NotReady <none> 42m v1.21.0
#给node节点加个标签
kubectl label node k8s-node1 node-role.kubernetes.io/worker01=''
kubectl label node k8s-node2 node-role.kubernetes.io/worker02=''