半自动化安装k8s集群脚本(适合刚入坑的运维小伙伴学习)
我直接打包了,不太好描述,应该可以看懂,看不懂请私信我邮箱tianjun@odboy.cn,或者微信i_odboy
https://www.odboy.cn/upload/bash_k8s-install_20230829.zip
K8s Master节点(带有master的脚本意思是在master节点上执行的, 以下为脚本内容)
#!/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 安装网络插件
# 如果一个命令返回一个非0退出状态值(失败)就退出
set -e
# 安装日志
install_log=/var/log/install_k8s.log
install_time=$(date +'%Y%m%d %T')
# k8s相关
k8s_version=1.19.4
k8s_service_cidr=10.96.0.0/12
## 这个与component中, kube-flannel.yml文件中的, net-conf.json配置项中的Network节点一致
k8s_pod_network_cidr=10.244.0.0/16
function log_info(){
# ${1}表示传入info的第一个参数
echo -e "\x1b[0;32m[$install_time] [Info] ${1}\x1b[0m"
}
function run_cmd(){
sh -c "$1 | $(tee -a "$install_log")"
}
function run_function(){
$1 | tee -a "$install_log"
}
function install_init() {
yum install -y wget
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache
yum -y update
}
function install_docker(){
log_info "1.安装docker..."
yum install yum-utils device-mapper-persistent-data lvm2 -y
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum makecache fast
yum install docker-ce -y
log_info "2.启动 Docker CE..."
sudo systemctl enable docker
sudo systemctl start docker
log_info "3.添加镜像加速器..."
if [ ! -f "/etc/docker/daemon.json" ];then
touch /etc/docker/daemon.json
fi
cat <<EOF > /etc/docker/daemon.json
{
"registry-mirrors": [
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com"
]
}
EOF
log_info "4.重新启动服务..."
sudo systemctl daemon-reload
sudo systemctl restart docker
log_info "5.测试 Docker 是否安装正确..."
docker run hello-world
#log_info "6.安装docker-compose..."
#sudo curl -L "https://ghproxy.com/https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#sudo chmod a+x /usr/local/bin/docker-compose
# 8.验证是否安装成功
#log_info "7.验证docker-compose是否安装成功..."
#docker-compose -v
}
function install_k8s() {
log_info "初始化k8s部署环境..."
init_env
log_info "添加k8s安装源..."
add_aliyun_repo
log_info "安装kubelet kubeadmin kubectl..."
install_kubelet_kubeadmin_kubectl
log_info "安装kubernetes master..."
yum -y install net-tools
if [[ ! "$(ps aux | grep 'kubernetes' | grep -v 'grep')" ]];then
kubeadmin_init
else
log_info "kubernetes master已经安装..."
fi
log_info "安装网络插件flannel..."
install_flannel
log_info "去污点..."
kubectl taint nodes --all node-role.kubernetes.io/master-
}
function init_env() {
log_info "初始化部署环境..."
log_info "关闭防火墙..."
systemctl stop firewalld
systemctl disable firewalld
log_info "关闭selinux..."
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/g' /etc/selinux/config
source /etc/selinux/config
log_info "关闭swap(k8s禁止虚拟内存以提高性能)..."
swapoff -a
sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab
log_info "设置网桥参数..."
cat <<-EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system #生效
sysctl -w net.ipv4.ip_forward=1
log_info "时间同步..."
yum install ntpdate -y
ntpdate ntp.aliyun.com
}
function add_aliyun_repo() {
log_info "添加Kubernetes Aliyun安装源..."
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() {
log_info "安装kubernetes..."
yum install kubelet-$k8s_version kubeadm-$k8s_version kubectl-$k8s_version -y
systemctl enable kubelet.service
log_info "确认kubelet kubeadmin kubectl是否安装成功..."
yum list installed | grep kubelet
yum list installed | grep kubeadm
yum list installed | grep kubectl
kubelet --version
}
function kubeadmin_init() {
local_ip=$(ip a| grep "scope global"|grep -v "docker"| cut -d " " -f 6| cut -d "/" -f 1)
kubeadm init --apiserver-advertise-address="${local_ip}" --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v$k8s_version --service-cidr=$k8s_service_cidr --pod-network-cidr=$k8s_pod_network_cidr
mkdir -p "$HOME"/.kube
sudo cp -i /etc/kubernetes/admin.conf "$HOME"/.kube/config
sudo chown "$(id -u)":"$(id -g)" "$HOME"/.kube/config
}
function install_flannel() {
kubectl apply -f ./component/kube-flannel.yml
}
function gen_never_expire_token() {
log_info "生成永不过期的Token,并且展示node节点加入子节点的命令"
kubeadm token create --ttl 0 --print-join-command
}
run_function "install_docker"
run_function "install_k8s"
run_function "gen_never_expire_token"
K8s Node节点(带有node的脚本意思是在node节点上执行的, 以下为脚本内容)
#!/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 安装网络插件
# 如果一个命令返回一个非0退出状态值(失败)就退出
set -e
# 安装日志
install_log=/var/log/install_k8s.log
install_time=$(date +'%Y%m%d %T')
# k8s相关
k8s_version=1.19.4
k8s_service_cidr=10.96.0.0/12
# 这个与component中, kube-flannel.yml文件中的, net-conf.json配置项中的Network节点一致
k8s_pod_network_cidr=10.244.0.0/16
# 这个地址需要手动修改哦,别忘了
k8s_master_ipaddr=192.168.234.100
function log_info(){
# ${1}表示传入info的第一个参数
echo -e "\x1b[0;32m[$install_time] [Info] ${1}\x1b[0m"
}
function run_cmd(){
sh -c "$1 | $(tee -a "$install_log")"
}
function run_function(){
$1 | tee -a "$install_log"
}
function install_init() {
yum install -y wget
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache
yum -y update
}
function install_docker(){
log_info "1.安装docker..."
yum install yum-utils device-mapper-persistent-data lvm2 -y
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum makecache fast
yum install docker-ce -y
log_info "2.启动 Docker CE..."
sudo systemctl enable docker
sudo systemctl start docker
log_info "3.添加镜像加速器..."
if [ ! -f "/etc/docker/daemon.json" ];then
touch /etc/docker/daemon.json
fi
cat <<EOF > /etc/docker/daemon.json
{
"registry-mirrors": [
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com"
]
}
EOF
log_info "4.重新启动服务..."
sudo systemctl daemon-reload
sudo systemctl restart docker
log_info "5.测试 Docker 是否安装正确..."
docker run hello-world
#log_info "6.安装docker-compose..."
#sudo curl -L "https://ghproxy.com/https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#sudo chmod a+x /usr/local/bin/docker-compose
# 8.验证是否安装成功
#log_info "7.验证docker-compose是否安装成功..."
#docker-compose -v
}
function install_k8s() {
info "初始化k8s部署环境..."
init_env
info "添加k8s安装源..."
add_aliyun_repo
info "安装kubelet kubeadmin kubectl..."
install_kubelet_kubeadmin_kubectl
}
# 初始化部署环境
function init_env() {
info "关闭防火墙..."
systemctl stop firewalld
systemctl disable firewalld
info "关闭selinux..."
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/g' /etc/selinux/config
source /etc/selinux/config
log_info "关闭swap(k8s禁止虚拟内存以提高性能)..."
swapoff -a
sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab
info "设置网桥参数"
cat <<-EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system #生效
sysctl -w net.ipv4.ip_forward=1
log_info "时间同步..."
yum install ntpdate -y
ntpdate ntp.aliyun.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() {
log_info "安装kubernetes..."
yum install kubelet-$k8s_version kubeadm-$k8s_version kubectl-$k8s_version -y
systemctl enable kubelet.service
log_info "确认kubelet kubeadmin kubectl是否安装成功..."
yum list installed | grep kubelet
yum list installed | grep kubeadm
yum list installed | grep kubectl
kubelet --version
}
function kubeadmin_init() {
kubeadm init --apiserver-advertise-address="${k8s_master_ipaddr}" --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v$k8s_version --service-cidr=$k8s_service_cidr --pod-network-cidr=$k8s_pod_network_cidr
mkdir -p "$HOME"/.kube
sudo cp -i /etc/kubernetes/admin.conf "$HOME"/.kube/config
sudo chown "$(id -u)":"$(id -g)" "$HOME"/.kube/config
}
function install_flannel() {
kubectl apply -f ./component/kube-flannel.yml
}
run_function "install_docker"
run_function "install_k8s"
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员odboy
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果