Ubuntu部署Kubernetes集群

安装Docker Engine

#删除老版本
sudo apt-get remove docker docker-engine docker.io containerd runc
#安装必要工具
sudo apt-get update 
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
#安装GPG证书&写入软件源信息
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
#安装docker
sudo apt-get -y update & sudo apt-get -y install docker-ce docker-ce-cli containerd.io
#测试
docker info

配置docker国内加速& 修改 Cgroup Driver 【Kubernetes 推荐使用 systemd 来代替 cgroupfs】 

vim /etc/docker/daemon.json

内容如下:(获取加速地址参见:官方镜像加速 (aliyun.com)

{
"registry-mirrors" : ["https://xxxxxx.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}

重启docker 

systemctl daemon-reload
systemctl restart docker
docker info

安装kubelet、kubeadm、kubectl

安装kubelet、kubeadm、kubectl 并配置kubelet开机启动

#1.更新 apt 包索引,并安装使用 Kubernetes apt 仓库所需要的包:
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl

#2.下载 Google Cloud 公开签名秘钥:【替换为aliyun镜像地址】
#sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg

#3.添加 Kubernetes apt 仓库:【替换为aliyun镜像地址】

#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
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
#4.更新 apt 包索引,使之包含新的仓库并安装 kubectl:

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

# 配置开机启动
systemctl daemon-reload
systemctl enable kubelet

#6.查看版本

root@master:~# kubelet --version
Kubernetes v1.23.1
root@master:~# kubectl version --client
Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.1", GitCommit:"86ec240af8cbd1b60bcc4c03c20da9b98005b92e", GitTreeState:"clean", BuildDate:"2021-12-16T11:41:01Z", GoVersion:"go1.17.5", Compiler:"gc", Platform:"linux/amd64"}
root@master:~# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.1", GitCommit:"86ec240af8cbd1b60bcc4c03c20da9b98005b92e", GitTreeState:"clean", BuildDate:"2021-12-16T11:39:51Z", GoVersion:"go1.17.5", Compiler:"gc", Platform:"linux/amd64"}
root@master:~#

如kubelet启动有错误可查看日志排除 

journalctl -u kubelet --no-pager
通过journalctl -u kubelet.service命令来查看kubelet服务的日志

禁用  swapoff

sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab
#永久关闭  vim /etc/fstab  注释掉最后一行的swap

通过kubeadm初始化集群

执行如下命令:


kubeadm init --apiserver-advertise-address=$(hostname -i) \
--apiserver-cert-extra-sans=127.0.0.1 \
--pod-network-cidr=10.244.0.0/16 \
--image-repository=registry.aliyuncs.com/google_containers

注意:这里有一个巨大的坑, 如果使用Flannel网络 【建议使用 --pod-network-cidr=10.244.0.0/16 或者后期修改Flannel ConfigMap 】,【部署Dashboard ,nfs-subdir-external-provisioner时】失败报错如下:Error getting server version: Get "https://10.96.0.1:443/version?timeout=32s: dial tcp 10.96.0.1:443: i/o timeout.

修改Flannel ConfigMap 如下:

kubectl edit cm -n kube-system kube-flannel-cfg
# edit the configuration by changing network from 10.244.0.0/16 to 10.10.0.0/16
kubectl delete pod -n kube-system -l app=flannel
kubectl delete po -n kube-system -l k8s-app=kubernetes-dashboard

部署成功如下图:

 按照提示执行:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf

配置其他节点使用kubectl

scp -r /etc/kubernetes/admin.conf ${node1}:/etc/kubernetes/admin.conf
#配置环境变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
#立即生效
source ~/.bash_profile

添加集群节点[kubeadm join] 

从上文初始化集群成功提示中复制【kubeadm join】在要添加的节点中执行

kubeadm join ${masterhost}:${port} --token xxxxx \
        --discovery-token-ca-cert-hash sha256:xxxxxxxxxxx

添加完成如下图:

root@master:~# kubectl get nodes -o wide
NAME              STATUS     ROLES                  AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION     CONTAINER-RUNTIME
master.vfox.top   NotReady   control-plane,master   10m   v1.23.1   172.31.201.18   <none>        Ubuntu 20.04.3 LTS   5.4.0-92-generic   docker://20.10.12
node01.vfox.top   NotReady   <none>                 14s   v1.23.1   172.22.88.110   <none>        Ubuntu 20.04.3 LTS   5.4.0-92-generic   docker://20.10.12
node02.vfox.top   NotReady   <none>                 10s   v1.23.1   172.22.88.111   <none>        Ubuntu 20.04.3 LTS   5.4.0-92-generic   docker://20.10.12

所以节点的status是NotReady ,这是因为没有安装网络插件 

安装网络插件 flannel

root@master:~# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Warning: policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+
podsecuritypolicy.policy/psp.flannel.unprivileged created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created
root@master:~# kubectl get nodes -o wide
NAME              STATUS   ROLES                  AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION     CONTAINER-RUNTIME
master.vfox.top   Ready    control-plane,master   27m   v1.23.1   172.31.201.18   <none>        Ubuntu 20.04.3 LTS   5.4.0-92-generic   docker://20.10.12
node01.vfox.top   Ready    <none>                 16m   v1.23.1   172.22.88.110   <none>        Ubuntu 20.04.3 LTS   5.4.0-92-generic   docker://20.10.12
node02.vfox.top   Ready    <none>                 16m   v1.23.1   172.22.88.111   <none>        Ubuntu 20.04.3 LTS   5.4.0-92-generic   docker://20.10.12
root@master:~#

配置dashboard

参考地址:GitHub - kubernetes/dashboard: General-purpose web UI for Kubernetes clusters

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

vim ./recommended.ya

 dashboard安装后service 默认是 ClusterIP 运行 修改成 NodePort

安装dashboard命令:kubectl apply -f recommended.yaml

root@master:~/app/k8s# kubectl apply -f ./recommended.yaml
namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created

通过 https://hostname:31443 就可以访问 Kubernetes Dashboard 了, 如下图

创建Kubernetes Dashboard 的登陆Token

创建一个ServiceAccount :dashboard-admin

kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard

将dashboard-admin 绑定到集群管理角色

kubectl create clusterrolebinding dashboard-cluster-admin --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin

查看dashboard-admin的登陆Token

kubectl get secret -n kubernetes-dashboard
kubectl describe secret dashboard-admin-token-5pglz -n kubernetes-dashboard

root@master:~/app/k8s# kubectl get secret -n kubernetes-dashboard
NAME                               TYPE                                  DATA   AGE
dashboard-admin-token-5pglz        kubernetes.io/service-account-token   3      6m26s
default-token-95htf                kubernetes.io/service-account-token   3      12m
kubernetes-dashboard-certs         Opaque                                0      12m
kubernetes-dashboard-csrf          Opaque                                1      12m
kubernetes-dashboard-key-holder    Opaque                                2      12m
kubernetes-dashboard-token-7xxbl   kubernetes.io/service-account-token   3      12m
root@master:~/app/k8s# kubectl describe secret dashboard-admin-token-5pglz -n kubernetes-dashboard
Name:         dashboard-admin-token-5pglz
Namespace:    kubernetes-dashboard
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: dashboard-admin
              kubernetes.io/service-account.uid: 4b4029cb-6eb2-49f3-a15c-42c9b7ac8d60

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1099 bytes
namespace:  20 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IlExNUJWbDZXWWpsTFhuWGxqNmRzNkFvMXBOTkc0aERlNzR1UGpIblFnc2MifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tNXBnbHoiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiNGI0MDI5Y2ItNmViMi00OWYzLWExNWMtNDJjOWI3YWM4ZDYwIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmVybmV0ZXMtZGFzaGJvYXJkOmRhc2hib2FyZC1hZG1pbiJ9.jcpagiw7jhORVxhsbMH4HpB9Fi_bS2crTYcXTXTtJY1JBcyazoahE3UOm6ZPL9NRX9U-Ut7nds7WrIYugi0LzjJIHQIj9sEhZhTdVTxTdrlUXzMGuEBW_RaWZzbxw6-S2NPFCVnAS3P0jY8GVFjD8rhtNU_ZtMFDJOLe6J3Cz_OQL9-Zz2lxWnklxoEmh8qmz3neczBR95bVOAznJ9mwyivsTpvgRYauAi7yrdanCCiJgORr21S0O4TYPhbZHdIq_4

拿到token就可以登陆dashboard 了,如图

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
部署自托管的 Kubernetes 集群,你可以按照以下步骤进行操作: 1. 选择合适的基础设施:首先,你需要选择一个云服务提供商或一个本地环境来部署你的 Kubernetes 集群。一些常见的选择包括使用云服务提供商(如 AWS、GCP 或 Azure)的虚拟机实例,或者在本地使用物理服务器或虚拟化平台。 2. 安装和配置操作系统:在选择的基础设施上安装和配置操作系统。可以选择使用支持 Kubernetes 的操作系统发行版,如 Ubuntu、CentOS 或 CoreOS。确保你的操作系统版本符合 Kubernetes 的要求,并按照官方文档的指导进行配置。 3. 安装 Docker:Kubernetes 使用 Docker 来运行容器。因此,你需要在每个节点上安装 Docker。可以按照 Docker 官方文档提供的指导进行安装,并确保你选择了与 Kubernetes 兼容的 Docker 版本。 4. 安装 Kubernetes 控制平面组件:Kubernetes 控制平面组件包括 API Server、Controller Manager、Scheduler 和 etcd(用于存储集群状态)。你可以使用 Kubernetes 发行版提供的工具(如 kubeadm、kops 或 kubespray)来安装和配置这些组件。按照所选工具的官方文档进行操作。 5. 配置网络:Kubernetes 需要一个网络插件来为容器提供网络连接。你可以选择使用常见的网络插件,如 Calico、Flannel 或 Weave。根据所选的网络插件,按照其官方文档提供的指导进行配置。 6. 添加工作节点:一旦控制平面组件配置完成,你可以将工作节点添加到集群中。工作节点是运行你的应用程序和服务的地方。使用 Kubernetes 发行版提供的工具来添加工作节点,并确保它们能够与控制平面组件通信。 7. 验证集群状态:一旦所有节点都成功加入集群,你可以使用 kubectl 命令行工具来验证集群的状态。运行一些简单的命令,如 `kubectl get nodes` 和 `kubectl get pods -n kube-system` 来确保集群正常运行。 这是部署自托管的 Kubernetes 集群的基本步骤。具体的步骤可能会因你选择的工具和基础设施而有所不同,所以建议参考官方文档以获取更详细的指导。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值