一、环境准备
由于k8s 集群比较吃配置, 建议使用 “按量计费” 来进行学习与测试, 三台 4核8G 的费用大概再 1.6元 /小时, 还是比较便宜的(具体操作请看:云服务器购买按量付费实例,并搭建私有网络图解)。如果想购买服务器,可以看下这个, 一年也就168,配置很高,更划算!! 【腾讯云】云产品限时秒杀,爆款2核4G云服务器,首年168元
- 三台云服务器、配置:4核8G
- 三台服务器内网互通(内网可以互相访问 VPC)
- 系统:CentOS 8.0
- 开启TCP 6443端口 :Kubernetes API 服务器 (API Server)
- 开启TCP 30000-32767 范围的端口:NodePort 服务
- 每台机器都设置成不同的hostname
-
# 1、三台机器一次运行下面的命令, 设置不同的hostname # 语法格式:hostnamectl set-hostname xxx hostnamectl set-hostname master hostnamectl set-hostname node1 hostnamectl set-hostname node2 # 2、重启服务器 reboot
-
-
将 SELinux 设置为 permissive 模式(相当于将其禁用)
-
sudo setenforce 0 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
-
-
关闭swap
-
# 临时关闭swap分区,当前会话生效,重启失效 swapoff -a # 永久关闭swap分区 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
-
二、环境搭建
1. 安装Docker
这里就不在赘述了, 不知道如何安装的请看我的另外一篇博客
注:由于k8s 和 Docker 版本差异, 可能会产生错误。所以请使用 “yum install -y docker-ce-19.03.13 docker-ce-cli-19.03.13 containerd.io” 替换下述链接的第 8 步的命令。
Linux 下安装Docker图解教程https://blog.csdn.net/IT_rookie_newbie/article/details/120687531
2. 安装Kubernetes
2.1、安装kubelet、kubeadm、kubectl (每台机器都需要执行)
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
repo_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
2.2、安装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 ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
done
EOF
chmod +x ./images.sh && ./images.sh
2.3、master 节点域名映射(每台机器都需要执行)
设置每台机器的hostname域名映射,映射的ip是master 节点的ip地址, 这里因为开启了VPC内网互通, 就只使用master节点的局域王ip 即可,否则使用公网ip。
#所有机器添加master域名映射,以下需要修改为自己的
echo "172.31.0.11 k8s-master" >> /etc/hosts
2.4、初始化主节点(只在master 主节点执行)
注:apiserver-advertise-address需要替换上一步映射的内网ip 、control-plane-endpoint需要替换成上一步映射的名称
kubeadm init \
--apiserver-advertise-address=172.31.0.11 \
--control-plane-endpoint=k8s-master \
--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \
--kubernetes-version v1.20.9 \
--service-cidr=10.96.0.0/16 \
--ignore-preflight-errors=all \
--pod-network-cidr=192.168.0.0/16
2.5、记录 2.4 步骤的执行结果
执行 2.4 的步骤, 页面会有一堆的执行结果, 当执行完成之后, 需要将下述的结果保存起来, 供后续操作使用。如下图
2.6、执行命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
2.7、安装网络插件Calico(只在master 主节点执行)
# 1、下载calico配置文件
curl https://docs.projectcalico.org/manifests/calico.yaml -O
# 2、执行配置文件
kubectl apply -f calico.yaml
######################2023年6月17日#####################################
### 发现上述安装方式不能用了, 可以使用下述的方式
kubectl apply -f https://docs.projectcalico.org/archive/v3.14/manifests/calico.yaml
如果出现“The connection to the server localhost:8080 was refused - did you specify the right host or port?” 错误, 就执行下面的命令,否则不需要执行!
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
2.8、将 node1 和 node2 节点加入工作节点
在工作节点(node1 , node2) 上执行上述初始化结果中的令牌内容,
kubeadm join k8s-master:6443 --token kqi0e4.j8v7dg0qxx4i3re9 \
--discovery-token-ca-cert-hash sha256:b8b22ee57294e3c9e4bf09d40ec46dfd2fbb3b07287d512361380fb6b3da019a
注:这个命令24小时内有效,如果超出了时间范围就执行 “kubeadm token create --print-join-command” ,重新生成一个令牌即可。
2.9、验证集群
在master 节点上使用 “kubectl get nodes” 来验证集群
三、部署dashboard(只在master 主节点执行)
dashboard 是kubernetes官方提供的可视化界面。官方地址:https://github.com/kubernetes/dashboard
1、安装
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
2、设置访问端口
执行 “kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard” 命令, 将内容中的 type: ClusterIP 改为 type: NodePort
3、查看端口
执行 “kubectl get svc -A |grep kubernetes-dashboard” 命令, 查看端口, 并且在安全组中放行该端口。
4、访问 dashboard
使用集群中任意IP都可以访问。例如本实例中的访问地址应该是 https://119.45.12.114:31756
4、创建访问账号
创建一个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
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
执行 dash.yaml 文件
kubectl apply -f dash.yaml
5、获取访问令牌
kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
将访问令牌输入到页面即可,下图是登录成功显示的页面。到此, k8s 集群的搭建就基本完成了, 后续还会发布更多有关k8s 的知识点, 请敬请关注哦!