一、Master和Node节点配置
1. 安装Docker服务
https://docs.aws.amazon.com/zh_cn/AmazonECS/latest/userguide/create-container-image.html
配置Docker
# 添加以下内容
sudo vim /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
# 重载扫描
sudo systemctl daemon-reload
# 重启docker服务
sudo systemctl restart docker
2. 安装依赖包
# 安装lsb包
sudo yum install -y redhat-lsb
# 安装常用依赖包
sudo yum install -y socat conntrack ntpdate ntp jq curl wget sysstat libseccomp vim net-tools git chrony
3. 安装k8s组件
# 添加k8s源
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF
# 安装组件(要和k8s版本一致)
sudo yum install -y kubeadm-1.22.7-0 kubectl-1.22.7-0 kubelet-1.22.7-0 --disableexcludes=kubernetes
# 设置kubelet自启动
sudo systemctl enable kubelet
4. 配置kubelet的cgroup
# 可以查看默认驱动
kubelet --help |grep cgroup-driver
sudo vim /etc/sysconfig/kubelet
# 添加下面的配置
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
# 设置kubelet开机自启,集群自动初始化完成自动拉起kubelet服务
sudo systemctl daemon-reload
sudo systemctl restart kubelet
# 在文件 /var/lib/kubelet/config.yaml 中添加设置 cgroupDriver: systemd,否则Kubeadm init将报错
二、Mater节点配置
1. 配置Hosts
# 设置主节点hostname
sudo hostnamectl set-hostname k8s-master
# 修改hosts绑定关系
sudo vim /etc/hosts
172.28.69.216 k8s-master
172.28.64.39 k8s-node1
2. kubeadm部署
sudo kubeadm init \
--apiserver-advertise-address={master_ip} \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.22.7 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all
# 重新初始化 kubeadm reset # 先重置
# 重新获取join脚本 kubeadm token create --print-join-command
—apiserver-advertise-address 集群通告地址
—image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
—kubernetes-version K8s版本,与上面安装的一致
—service-cidr 集群内部虚拟网络,Pod统一访问入口
—pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致
初始化之后,会输出一个join命令,先复制出来,node节点加入master会使用。
3. 拷贝k8s认证文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
查看工作节点
kubectl get nodes
此时节点状态为 NotReady
4. 部署容器网络
Calico是一个纯三层的数据中心网络方案,是目前Kubernetes主流的网络方案。
下载YAML:
wget https://docs.projectcalico.org/manifests/calico.yaml
下载完后还需要修改里面定义Pod网络(CALICO_IPV4POOL_CIDR),与前面kubeadm init的 —pod-network-cidr指定的一样。
修改完后文件后,进行部署:
kubectl apply -f calico.yaml
kubectl get pods -n kube-system #执行结束要等上一会才全部running
注:以后所有yaml文件都只在Master节点执行。
安装目录:/etc/kubernetes/
组件配置文件目录:/etc/kubernetes/manifests/
5. 部署Dashboard
Dashboard是官方提供的一个UI,可用于基本管理K8s资源。
YAML下载地址:
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml
默认Dashboard只能集群内部访问,修改Service为NodePort类型(端口范围:30000-32767),暴露到外部:
vi recommended.yaml
...
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
ports:
- port: 443
targetPort: 8443
nodePort: 30001
selector:
k8s-app: kubernetes-dashboard
type: NodePort
...
创建service account并绑定默认cluster-admin管理员集群角色:
# 创建用户
kubectl create serviceaccount dashboard-admin -n kube-system
# 用户授权
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
# 获取用户Token
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
生成token,可以用于登录k8s dashboard
参考:
https://blog.csdn.net/tiny_du/article/details/123823093
https://blog.csdn.net/omaidb/article/details/121549382