配置Kubernetes集群

配置Kubernetes集群

实验简介

通过本实验,了解Kubenertes组件,掌握配置Kubernetes集群大体步骤

任务要求

1、安装docker

2、安装kubeadm、kubelet 和 kubectl

3、部署Kubernetes图形化界面Dashboard

实验环境

AWS云计算服务EC2(ubuntu20)

一、什么是kubernetes

kubernetes官方文档https://kubernetes.io/zh

Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。

二、安装Docker

在ubuntu系统上安装docker参考https://docs.docker.com/engine/install/ubuntu/

1、更行apt镜像,安装依赖(安装必要的系统工具)

sudo apt-get update

sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

2、添加Docker官方的GPG密钥1.在ubuntu新安装anaconda之后,每次打开终端,总是显示正在使用默认anaconda中的base环境。关闭自动打开的虚拟环境,可以采用如下命令:

 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

或者添加阿里云镜像源GPG密钥

curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

3、使用以下命令设置稳定存储库。要添加 夜间或测试存储库,请在以下命令中的单词后添加单词****或****(或两者)了解nightlytest频道。

 echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ 
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

阿里云镜像源仓库

sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"

4、更新apt源,安装 Docker 引擎

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

有多个 Docker 存储库?
如果您启用了多个 Docker 存储库,则在apt-get installapt-get update命令中未指定版本的情况下安装或更新始终会安装可能的最高版本,这可能不适合您的稳定性需求。

5、通过运行** 映像验证 Docker Engine 是否已正确安装**​

sudo docker run hello-world

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q4CTE3Or-1665204082271)(image/image_iBTKu12Hg7.png)]

6、启动并设置开机自启动docker

sudo systemctl enable docker && sudo systemctl start docker

7、修改****文件,每次使用docker命令不用加sudo

sudo vim ~/.bashrc
# 在最下面添加一行:
export DOCKER_HOST='unix:///var/run/docker.sock'
#终端输入:使环境变量生效
source  ~/.bashrc

8、Docker启动参数配置编辑 /etc/docker/daemon.json文件

设置阿里云镜像库加速dockerhub的镜像。国内访问dockerhub不稳定,将对dockerhub的镜像拉取代理到阿里云镜像库

配上准备工作中防火墙修改FORWARD链默认策略,禁用iptables的设置

根据业务规划修改容器实例存储根路径(默认路径是/var/lib/docker)

{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/","https://registry.docker-cn.com","http://hub-mirror.c.163.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "iptables": false,
  "ip-masq": false, 
  "storage-driver": "overlay2",
  "graph": "/home/ubuntu/docker"
}

重启Docker服务

#重新加载某个服务的配置文件
sudo systemctl daemon-reload 

sudo systemctl restart docker

三、系统配置

1、禁掉所有的swap分区

sudo swapoff -a

2、允许 iptables 检查桥接流量

  •    确保 **** 模块被加载。这一操作可以通过运行 **** 来完成。若要显式加载该模块,可执行 ****。为了让你的 Linux 节点上的 iptables 能够正确地查看桥接流量,你需要确保在你的 **** 配置中将 **** 设置为 1*。
    
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

3、开启数据包转发

修改/etc/sysctl.conf,开启ipv4转发:

sudo vim /etc/sysctl.conf

将文件中#net.ipv4.ip_forward = 1 注释符号去掉,修改为:

net.ipv4.ip_forward = 1

使命令生效:

sudo sysctl -p

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wOduXN6q-1665204082273)(image/image_-2Ee9lvn60.png)]

四、安装kubeadm、kubelet 和 kubectl

配置参考:https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

**你需要在每台机器上安装以下的软件包:

  • :用来初始化集群的指令。

  • :在集群中的每个节点上用来启动 Pod 和容器等。

:用来与集群通信的命令行工具。

1、更新 包索引并安装使用 Kubernetes 仓库所需要的包

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl

2、下载 Google Cloud 公开签名秘钥

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

由于国外源不稳定,可以选择国内阿里云公钥

sudo curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -

3、添加 Kubernetes 仓库

kuberneters官方仓库

echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

阿里云仓库

sudo cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

4、更新 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

5、配置 cgroup 驱动程序

修改kubeadm配置文件

sudo vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

📌警告:
你需要确保容器运行时和 kubelet 所使用的是相同的 cgroup 驱动,否则 kubelet 进程会失败。
相关细节可参见配置 cgroup 驱动

在 Environment 后再新加:

Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"

另一个指定的pod源的:

Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.1"

重启:

sudo systemctl daemon-reload
sudo systemctl restart kubelet

6、初始化控制平面节点

控制平面节点是运行控制平面组件的机器, 包括 etcd (集群数据库) 和 API Server (命令行工具 kubectl 与之通信)

1. (推荐)如果计划将单个控制平面 kubeadm 集群升级成高可用, 你应该指定 --control-plane-endpoint 为所有控制平面节点设置共享端点。 端点可以是负载均衡器的 DNS 名称或 IP 地址。

2. 选择一个 Pod 网络插件,并验证是否需要为 kubeadm init 传递参数。 根据你选择的第三方网络插件,你可能需要设置 --pod-network-cidr 的值。 请参阅 安装Pod网络附加组件

3. (可选)从版本1.14开始,kubeadm 尝试使用一系列众所周知的域套接字路径来检测 Linux 上的容器运行时。 要使用不同的容器运行时, 或者如果在预配置的节点上安装了多个容器,请为 kubeadm init 指定 --cri-socket 参数。 请参阅安装运行时

4. (可选)除非另有说明,否则 kubeadm 使用与默认网关关联的网络接口来设置此控制平面节点 API server 的广播地址。 要使用其他网络接口,请为 kubeadm init 设置 --apiserver-advertise-address=<ip-address> 参数。 要部署使用 IPv6 地址的 Kubernetes 集群, 必须指定一个 IPv6 地址,例如 --apiserver-advertise-address=fd00::101

要初始化控制平面节点,请运行:


kubeadm init --apiserver-advertise-address=<ip> --image-repository registry.aliyuncs.com/google_containers --kubernetes-version <version> --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16

# pod-network-cidr是指配置节点中的pod的可用IP地址,此为内部IP

# apiserver-advertise-address 为master的IP地址

# kubernetes-version 通过kubectl version 可以查看到

kubeadm init 首先运行一系列预检查以确保机器 准备运行 Kubernetes。这些预检查会显示警告并在错误时退出。然后 kubeadm init 下载并安装集群控制平面组件。这可能会需要几分钟。 完成之后你应该看到:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fGDlek6v-1665204082275)(image/41f21b586599cf434fcac1cfffc8825_jiBFxtRxr6.png)]

要使非 root 用户可以运行 kubectl,请运行以下命令, 它们也是 kubeadm init 输出的一部分:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

7、安装 Pod 网络附加组件

  • 你必须部署一个基于 Pod 网络插件的 容器网络接口 (CNI),以便你的 Pod 可以相互通信。 在安装网络之前,集群 DNS (CoreDNS) 将不会启动。

你可以使用以下命令在控制平面节点或具有 kubeconfig 凭据的节点上安装 Pod 网络附加组件:

kubectl apply -f <add-on.yaml>

安装calico

kubectl apply -f https://docs.projectcalico.org/v3.19/manifests/calico.yaml

8、开启单机模式

kubectl taint nodes --all node-role.kubernetes.io/master-

📌安装 Pod 网络后,您可以通过在 kubectl get pods --all-namespaces 输出中检查 CoreDNS Pod 是否 Running 来确认其是否正常运行。 一旦 CoreDNS Pod 启用并运行,你就可以继续加入节点。

成功运行如图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s20OhB96-1665204082277)(image/f84f159b59c7c8dadb903acd7b85554_6jA2K6W_5U.png)]

了解更多访问:https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/

https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/

五、部署和访问 Kubernetes Dashboard

Dashboard 是基于网页的 Kubernetes 用户界面。 你可以使用 Dashboard 将容器应用部署到 Kubernetes 集群中,也可以对容器应用排错,还能管理集群资源。 你可以使用 Dashboard 获取运行在集群中的应用的概览信息,也可以创建或者修改 Kubernetes 资源 (如 Deployment,Job,DaemonSet 等等)。 例如,你可以对 Deployment 实现弹性伸缩、发起滚动升级、重启 Pod 或者使用向导创建新的应用。

1、部署Dashboard

在下载recommended.yaml之前需要查找与kubernetes相对应的版本。

#编辑/etc/hosts文件,配置解析GitHub
sudo vim /etc/hosts
#重启
199.232.28.133 raw.githubusercontent.com

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sY5VyI2x-1665204082279)(image/image_rZ8xUzCPTE.png)]

下载recommended.yaml文件

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml


配置recommended.yaml,修改Dashboard访问方式为NodePort

#打开recommended.yaml,找到Kind: Service
#将代码修改成下面形式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qSc1eYxq-1665204082280)(image/image_zf_w592rkU.png)]

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort
  ports:
    - port: 443
      nodePort: 30001
      targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard

使用命令部

kubectl apply -f recommended.yaml

验证

kubectl get svc --all-namespaces
kubectl -n kubernetes-dashboard get pod -o wide

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ocYjWyDs-1665204082281)(image/image_HOnl1s-Dme.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N30Rc0gs-1665204082282)(image/image_b3eurelqeD.png)]

此时就可以打开 Dashboard 的登录界⾯:访问https://ip:30001

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9KPhRBTD-1665204082283)(image/image_71cF0sqCOJ.png)]

2、RBAC授权,创建管理员用户,获取token登录页面

此时我们⽆法登录,因为没有获取 Token,直接使⽤当前的 Token ⼤概率会报错,所以我们先新增权限。在终端中执⾏如下命令创建对应的 yaml ⽂件。

第一个文件命名为dashboard-admin.yaml

apiVersion: v1 
kind: ServiceAccount 
metadata: 
  labels: 
    k8s-app: kubernetes-dashboard 
  name: dashboard-admin 
  namespace: kubernetes-dashboard

第二个文件命名为:dashboard-role.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata: 
  name: dashboard-admin-bind-cluster-role 
  labels: 
    k8s-app: kubernetes-dashboard
roleRef: 
  apiGroup: rbac.authorization.k8s.io 
  kind: ClusterRole 
  name: cluster-admin
subjects: 
  - kind: ServiceAccount 
    name: dashboard-admin 
    namespace: kubernetes-dashboard

然后使⽤ kubectl 创建:

kubectl create -f dashboard-admin.yaml 
kubectl create -f dashboard-role.yaml

将输出中的 Token 字符串复制下来,注意不需要前⾯的 token:,只需要后⾯的字符串即可。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R5sb8Tww-1665204082284)(image/2f94a79b0830ed522e9a3e3b2401f36_U6De9-mXuG.png)]

粘贴到⽹⻚中,就可以登录了,Dashboard 就部署完毕了
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值