kubernetes集群搭建

在这里插入图片描述

首先需要搭建三台服务器

安装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}}"

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值