- 一台或多台机器,操作系统CentOS7.x-86_x64
- 硬件配置:内存2GB或2G+,CPU 2核或CPU 2核+
- 集群内各个机器之间能相互通信
- 集群内各个机器可以访问外网,保证网络畅通(最好能访问谷歌),需要拉取镜像
- 禁止swap分区
- 输入命令swapoff -a,禁用swap分区;
- 输入命令free -mh,再查看一下swap分区状态;
- 常用工具 :yum install wget net‐tools vim bash‐comp* ‐y
- 主机命名: hostnamectl set‐hostname master
- 设置解释: vi /etc/resolv.conf 设置 servername 114.114.114.114
准备工作:本地虚拟机测试的时候, 关于设置双网卡静态 IP 的内容, 自行百度。
vi /etc/sysconfig/network-script/ifcfg-enp0s3
里面的 dhcp 改为 static
末尾 IPADDR=192.168.56.xx
重启网络: systemctl restart network
在主机中,新建脚本文件 install_k8s.sh:
vi install_k8s.sh
写入下面内容
#!/bin/bash
# Kubernetes部署环境要求:
#(1)一台或多台机器,操作系统CentOS 7.x-86_x64
#(2)硬件配置:内存2GB或2G+,CPU 2核或CPU 2核+;
#(3)集群内各个机器之间能相互通信;
#(4)集群内各个机器可以访问外网,需要拉取镜像;
#(5)禁止swap分区;# 安装步骤
#1. 安装docker
#1.1 如果没有安装docker,则安装docker。会附带安装一个docker-compose
#
#2. 安装k8s
#2.1 初始化环境
#2.2 添加安装源
#2.3 安装kubelet、kubectl、kubeadmin
#2.4 安装master
#2.5 安装网络插件set -e# 安装日志
install_log=/var/log/install_k8s.log
tm=$(date +'%Y%m%d %T')# 日志颜色
COLOR_G="\x1b[0;32m" # green
RESET="\x1b[0m"function info(){echo -e "${COLOR_G}[$tm] [Info] ${1}${RESET}"
}function run_cmd(){sh -c "$1 | $(tee -a "$install_log")"
}function run_function(){$1 | tee -a "$install_log"
}function install_docker(){info "1.使用脚本自动安装docker..."curl -sSL https://get.daocloud.io/docker | shinfo "2.启动 Docker CE..."sudo systemctl enable dockersudo systemctl start dockerinfo "3.添加镜像加速器..."if [ ! -f "/etc/docker/daemon.json" ];thentouch /etc/docker/daemon.jsonficat < /etc/docker/daemon.json
{"registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"]
}
EOFinfo "4.重新启动服务..."sudo systemctl daemon-reloadsudo systemctl restart dockerinfo "5.测试 Docker 是否安装正确..."docker run hello-worldinfo "6.检测..."docker inforead -p "是否安装docker-compose?默认为 no. Enter [yes/no]:" is_composeif [[ "$is_compose" == 'yes' ]];theninfo "7.安装docker-compose"sudo curl -L "https://github.com/docker/compose/releases/download/2.12.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod a+x /usr/local/bin/docker-compose# 8.验证是否安装成功info "8.验证docker-compose是否安装成功..."docker-compose -vfi
}function install_k8s() {info "初始化k8s部署环境..."init_envinfo "添加k8s安装源..."add_aliyun_repoinfo "安装kubelet kubeadmin kubectl..."install_kubelet_kubeadmin_kubectlinfo "安装kubernetes master..."yum -y install net-toolsif [[ ! "$(ps aux | grep 'kubernetes' | grep -v 'grep')" ]];thenkubeadmin_initelseinfo "kubernetes master已经安装..."fiinfo "安装网络插件flannel..."install_flannelinfo "去污点..."kubectl taint nodes --all node-role.kubernetes.io/master-
}# 初始化部署环境
function init_env() {info "关闭防火墙"systemctl stop firewalldsystemctl disable firewalldinfo "关闭selinux"sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/g' /etc/selinux/configsource /etc/selinux/configinfo "关闭swap(k8s禁止虚拟内存以提高性能)"swapoff -ased -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstabinfo "设置网桥参数"cat <<-EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOFsysctl --system #生效sysctl -w net.ipv4.ip_forward=1info "时间同步"yum install ntpdate -yntpdate time.windows.com
}# 添加aliyun安装源
function add_aliyun_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
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
}function install_kubelet_kubeadmin_kubectl() {yum install kubelet-1.19.4 kubeadm-1.19.4 kubectl-1.19.4 -ysystemctl enable kubelet.serviceinfo "确认kubelet kubeadmin kubectl是否安装成功"yum list installed | grep kubeletyum list installed | grep kubeadmyum list installed | grep kubectlkubelet --version
}function kubeadmin_init() {sleep 1read -p "请输入master ip地址:" ipkubeadm init --apiserver-advertise-address="${ip}" --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.19.4 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16mkdir -p "$HOME"/.kubesudo cp -i /etc/kubernetes/admin.conf "$HOME"/.kube/configsudo chown "$(id -u)":"$(id -g)" "$HOME"/.kube/config
}function install_flannel() {yum -y install wgetwget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.ymlkubectl apply -f kube-flannel.yml
}# 安装docker
read -p "是否安装docker?默认为:no. Enter [yes/no]:" is_docker
if [[ "$is_docker" == 'yes' ]];thenrun_function "install_docker"
fi# 安装k8s
read -p "是否安装k8s?默认为:no. Enter [yes/no]:" is_k8s
if [[ "$is_k8s" == 'yes' ]];thenrun_function "install_k8s"
fi
chmod +x install_k8s.sh
sh install_k8s.sh
安装步骤就是这么简单说明:
- 脚本可以重复执行
- 若安装过程出现错误,可以查看文章最下面的FAQ。如果FAQ中没有您遇到的问题,那么欢迎在文章中评论留言,我会抽时间查看解决。
- 安装日志文件在
/var/log/install_k8s.log
,安装日志中有node join命令,如下:
将join命令拷贝到node机器执行,加入到k8s集群中。附上一份我的安装日志:install_k8s.log
验证docker是否安装成功
docker -v
验证docker-compose是否安装成功
docker-compose -v
验证k8s是否安装成功
kubectl get nodes
kubectl get nodes
查看,master状态已经正常了。我们先来部署下nginx,看下刚刚部署的环境是否正常。
启动nginx pod
kubectl run nginx-pod --image=nginx
查看pod
kubectl get pod -o wide
访问pod:
curl 10.244.0.4
。
此时只能通过上面的cluster-ip访问
将pod暴露成service:
kubectl expose pod nginx-pod --type=NodePort --port=80
查看service:
kubectl get svc
。此时在宿主机上映射一个随机端口,如下:
curl localhost:31493
访问[这里端口你的可能跟我的不一样]。ok,到这里,基本上可以宣告您的k8s已经成功搭建!惊不惊喜O(∩_∩)O哈哈~
4.1 启动后,进入节点, 设置新的 IP ,
vi /etc/sysconfig/network-script/ifcfg-enp0s3
修改 IPADDR=192.168.56.102
4.2: 设置机器名 : hostnamectl set-hostname node1
4.3: 配置端口转发:
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
4.4 在 master 生成加入命令, 复制到节点上执行
kubeadm token create --print-join-command
4.5 在 node 节点上重置 k8s 的设置, 冲掉 master 复制而来的设置
kubeadm reset
4.6 把 4.4 复制的命令, 加入到 nodes, 命令类似于:
kubeadm join 192.168.56.101:6443 --token v9ilta.o83m802jek5a8wro --discovery-token-ca-cert-hash sha256:657952968a48d2b303bd01e0ea487cad07e683bed62e127fc85027722cabac12
4.7 检阅成功:
kubectl get nodes
总结下来,整个安装步骤主要如下:
Q: [ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
A: 执行 sysctl -w net.ipv4.ip_forward=1