Shell脚本(直接拷贝)
#!/bin/bash
host_addr=`ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`
hostnamectl set-hostname master
echo -e "$host_addr\tmaster" >> /etc/hosts
cp /home/shell/support/docker/kubernetes_aliyun.repo /etc/yum.repos.d/
mkdir -p /etc/docker
cp /home/shell/support/docker/daemon.json /etc/docker
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
setenforce 0
sudo sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
yum erase -y podman buildah
# yum list docker-ce --showduplicates | sort -r
# 安装软件
yum install -y yum-utils device-mapper-persistent-data lvm2 net-tools docker-ce-3:19.03.15-3.el8 docker-ce-cli containerd.io tc
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
firewall-cmd --permanent --zone=public --add-port=6443/tcp
firewall-cmd --permanent --zone=public --add-port=10250/tcp
firewall-cmd --permanent --zone=public --add-port=30000/tcp
firewall-cmd --reload
# 设置docker驱动Cgroup=>systemd
sed -i "s@ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock@ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd@g" /usr/lib/systemd/system/docker.service
# 关闭swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
sed -i 's/KUBELET_EXTRA_ARGS=/KUBELET_EXTRA_ARGS="--fail-swap-on=false"/' /etc/sysconfig/kubelet
# 启动docker服务和kubelet服务
systemctl enable --now docker
systemctl enable --now kubelet
kubelet_version=`kubelet --version|awk '{print $2}'`
# 版本
echo "============kubelet============"
kubelet --version
echo "============kubelet============"
# 显示驱动模式
echo "============Cgroup============"
docker info | grep Cgroup
echo "============Cgroup============"
# 初始化
# apiserver-advertise-address:API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认网络接口
# apiserver-cert-extra-sans:用于 API Server 服务证书的可选附加主题备用名称(SAN)。可以是 IP 地址和 DNS 名称
# image-repository:选择用于拉取控制平面镜像的容器仓库,默认值:"k8s.gcr.io"
# ignore-preflight-errors:错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误
# kubernetes-version:为控制平面选择一个特定的 Kubernetes 版本,默认值:"stable-1"
# service-cidr:为服务的虚拟 IP 地址另外指定 IP 地址段,默认值:"10.96.0.0/12"
# pod-network-cidr:指明 pod 网络可以使用的 IP 地址段。如果设置了这个参数,控制平面将会为每一个节点自动分配 CIDRs
kubeadm init \
--apiserver-advertise-address=0.0.0.0 \
--apiserver-cert-extra-sans=127.0.0.1 \
--image-repository=registry.aliyuncs.com/google_containers \
--ignore-preflight-errors=all \
--kubernetes-version=$kubelet_version \
--service-cidr=10.10.0.0/16 \
--pod-network-cidr=10.18.0.0/16
#
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 安装calico网络
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
sleep 10s
echo "============node============"
kubectl get node
echo "============node============"
echo "============pod============"
kubectl get pod --all-namespaces
echo "============pod============"
kubectl create -f /home/shell/support/docker/recommended.yaml
# 创建登录Token
kubectl create sa dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
kubectl taint nodes --all node-role.kubernetes.io/master-
ADMIN_SECRET=$(kubectl get secrets -n kube-system | grep dashboard-admin | awk '{print $1}')
DASHBOARD_LOGIN_TOKEN=$(kubectl describe secret -n kube-system ${ADMIN_SECRET} | grep -E '^token' | awk '{print $2}')
echo "============kubernetes-dashboard============"
kubectl get svc -n kubernetes-dashboard
echo "dashboard地址: https://$host_addr:30000/"
echo "dashboard Token: ${DASHBOARD_LOGIN_TOKEN}"
echo "============kubernetes-dashboard============"
用到的几个文件
- kubernetes_aliyun.repo
- daemon.json
- recommended.yaml
不知道怎么上传,看官自己搞定
Tips:Centos2021年技术更新到期