首先需要搭建三台服务器
安装Docker
- 移除以前的docker相关包
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
- 配置yum源
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
- 安装docker
sudo yum install -y docker-ce docker-ce-cli containerd.io
- 启动
systemctl enable docker --now
- 配置加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts":{
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
kubeadm创建集群
安装要求:
- 一台兼容的linux主机,kubernetes项目为基于debian和redhat的Linux发行版以及一些不提供包管理工具的发行版提供通用的指令;
- 每台机器2CB或者更多的RAM(如果少于这个数字将会影响你应用的运行内存);
- 2CPU核或更多;
- 集群中的所有机器的网络彼此均能相互连接;
- 设置防火墙放行规则;
- 节点之中不可以有重复的主机名、MAC地址或product_uuid;
- 设置不同的hostname;
- 开启机器上的某些端口;
- 禁用交换分区(永久关闭),为了保障kubelet正常工作;
基础环境
所有机器执行以下命令:
// k8s-master k8s-node1 k8s-node2
hostnamectl set-hostname xxx
// 将SELinux设置为permissive模式(相当于将其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=premissive/' /etc/selinux/config
// 关闭swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
# 允许iptables检查桥接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
安装kubectl、kubeadm、kubelet
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF
sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes
sudo systemctl enable --now kubelet
使用kubeadm引导集群
- 下载各个机器需要的镜像:
sudo tee ./images.sh <<-'EOF'
#!/bin/bash
images={
kube-apiserver:v1.20.9
kube-proxy:v1.20.9
kube-controller-manager:v1.20.9
kube-scheduler:v1.20.9
coredns:1.7.0
etcd:3.4.13-0
pause:3.2
}
for imageName in ${image[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
done
EOF
chmod +x ./images.sh && ./images.sh
- 初始化主节点
# 所有机器添加master域名映射(改为自己的)
echo "172.31.0.2 cluster-endpoint" >> /etc/hosts
# 主节点运行
kubeadm init \
--apiserver-advertise-address=172.31.0.2 \
--control-plane-endpoint=cluster-endpoint \
--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \
--kubernetes-version v1.20.9 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=192.168.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
- worker节点加入集群
# worker节点执行master命令输出的命令(24小时有效)
kubeadm join cluster-endpoint:6443 --token xxxxx \
--discovery-token-ca-cert-hash xxxx
新令牌:在master节点运行命令kubeadm token create --print-join-command
部署dashboard
kubernetes官方提供的可视化界面,master执行
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
设置访问端口:
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
将type: ClusterIP改为type: NodePort
kubectl get svc -A | grep kubernetes-dashboard
# 找到端口,在安全组放行
访问:https://集群任意IP:端口
创建访问账号:
vi dash.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subject:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
kubectl apply -f dash.yaml
令牌访问:
# 获取访问令牌
kubectl -n kubernetes-dashboard get secret ${kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secret[0].name}"} -o go-template="{{.data.token | base64decode}}"