文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Kubernetes集群的搭建方法

2023-06-19 09:54

关注

本篇内容主要讲解“Kubernetes集群的搭建方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Kubernetes集群的搭建方法”吧!

0. 概要

使用kubeadm搭建一个单节点kubernets实例,仅供学习. 运行环境和软件概要如下:

~版本备注
OSUbuntu 18.0.4192.168.132.152 my.servermaster.local/192.168.132.154 my.worker01.local
Docker18.06.1~ce~3-0~ubuntuk8s最新版(1.12.3)支持的最高版本, 必须固定
Kubernetes1.12.3目标软件

以上系统和软件基本是2018.11截止最新的状态, 其中docker需要注意必须安装k8s支持到的版本.

1. 安装步骤

swapoff -a
apt-get install docker-ce=18.06.1~ce~3-0~ubuntu
apt-get update && apt-get install -y apt-transport-httpscurl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -cat <<EOF >/etc/apt/sources.list.d/kubernetes.listdeb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial mainEOFapt-get updateapt-get install -y kubelet kubeadm kubectlapt-mark hold kubelet kubeadm kubectl

2. 使用kubeadm创建集群

2.1 准备镜像

因为国内是访问不到k8s.gcr.io所以需要将需要的镜像提前下载, 这次采用从阿里云镜像仓库下载, 并修改下载后的镜像tag为k8s.gcr.io

# a. 查看都需要哪些镜像需要下载kubeadm config images list --kubernetes-version=v1.12.3k8s.gcr.io/kube-apiserver:v1.12.3k8s.gcr.io/kube-controller-manager:v1.12.3k8s.gcr.io/kube-scheduler:v1.12.3k8s.gcr.io/kube-proxy:v1.12.3k8s.gcr.io/pause:3.1k8s.gcr.io/etcd:3.2.24k8s.gcr.io/coredns:1.2# b. 创建一个自动处理脚本下载镜像->重新tag->删除老tagvim ./load_images.sh#!/bin/bash### config the image mapdeclare -A images map=()images["k8s.gcr.io/kube-apiserver:v1.12.3"]="registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.12.3"images["k8s.gcr.io/kube-controller-manager:v1.12.3"]="registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.12.3"images["k8s.gcr.io/kube-scheduler:v1.12.3"]="registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.12.3"images["k8s.gcr.io/kube-proxy:v1.12.3"]="registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.12.3"images["k8s.gcr.io/pause:3.1"]="registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1"images["k8s.gcr.io/etcd:3.2.24"]="registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.2.24"images["k8s.gcr.io/coredns:1.2.2"]="registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.2.2"### re-tag foreachfor key in ${!images[@]}dodocker pull ${images[$key]}docker tag ${images[$key]} $keydocker rmi ${images[$key]}done### checkdocker images# c. 执行脚本准镜像sudo chmod +x load_images.sh./load_images.sh
2.2 初始化集群(master)

初始化需要指定至少两个参数:

### 执行初始化命令sudo kubeadm init --kubernetes-version=v1.12.3 --pod-network-cidr=10.244.0.0/16### 最后的结果如下... ...Your Kubernetes master has initialized successfully!To start using your cluster, you need to run the following as a regular user:  mkdir -p $HOME/.kube  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config  sudo chown $(id -u):$(id -g) $HOME/.kube/configYou should now deploy a pod network to the cluster.Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:  https://kubernetes.io/docs/concepts/cluster-administration/addons/You can now join any number of machines by running the following on each nodeas root:  kubeadm join 192.168.132.152:6443 --token ymny55.4jlbbkxiggmn9ezh --discovery-token-ca-cert-hash sha256:70265fafdb22d524c15616543d0b76527c686329221340b3b8da3652abed46b9
2.3 根据成功信息配置非管理员账号使用kubectl
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config

使用非root账号查看节点情况:

kubectl get nodesNAME           STATUS     ROLES    AGE   VERSIONservermaster   NotReady   master   28m   v1.12.3

发现有一个master节点, 但是状态是NotReady, 这里需要做一个决定:

如果希望是单机则执行如下

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

如果希望搭建继续, 则继续后续步骤, 此时主节点状态可以忽略.

2.4 应用网络插件

查看kube-flannel.yml文件内容, 复制到本地文件避免terminal无法远程获取

kubectl apply -f kube-flannel.ymlclusterrole.rbac.authorization.k8s.io/flannel createdclusterrolebinding.rbac.authorization.k8s.io/flannel createdserviceaccount/flannel createdconfigmap/kube-flannel-cfg createddaemonset.extensions/kube-flannel-ds-amd64 createddaemonset.extensions/kube-flannel-ds-arm64 createddaemonset.extensions/kube-flannel-ds-arm createddaemonset.extensions/kube-flannel-ds-ppc64le createddaemonset.extensions/kube-flannel-ds-s390x created
2.5 新建worker节点

worker节点新建参考[1. 安装步骤]在另外一台服务器上新建即可, worker节点不用准备2.1~2.3及之后的所有步骤, 仅需完成基本安装, 安装完毕进入新的worker节点, 执行上一步最后得到join命令:

kubeadm join 192.168.132.152:6443 --token ymny55.4jlbbkxiggmn9ezh --discovery-token-ca-cert-hash sha256:70265fafdb22d524c15616543d0b76527c686329221340b3b8da3652abed46b9... ...This node has joined the cluster:* Certificate signing request was sent to apiserver and a response was received.* The Kubelet was informed of the new secure connection details.Run 'kubectl get nodes' on the master to see this node join the cluster.
2.6 检查集群(1 master, 1 worker)
kubectl get nodesNAME           STATUS   ROLES    AGE   VERSIONservermaster   Ready    master   94m   v1.12.3worker01       Ready    <none>   54m   v1.12.3
2.7 创建dashboard

复制kubernetes-dashboard.yaml内容到本地文件, 方式命令行无法访问远程文件, 编辑最后一个配置Dashboard Service, 增加type和nodePort, 结果如下:

# ------------------- Dashboard Service ------------------- #kind: ServiceapiVersion: v1metadata:  labels:    k8s-app: kubernetes-dashboard  name: kubernetes-dashboard  namespace: kube-systemspec:  ports:    - port: 443      targetPort: 8443      nodePort: 30000  type: NodePort  selector:    k8s-app: kubernetes-dashboard

在master节点执行创建dashboard服务的命令:

kubectl create -f kubernetes-dashboard.yaml secret/kubernetes-dashboard-certs createdserviceaccount/kubernetes-dashboard createdrole.rbac.authorization.k8s.io/kubernetes-dashboard-minimal createdrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-minimal createddeployment.apps/kubernetes-dashboard createdservice/kubernetes-dashboard created

浏览器输入worker节点ip和端口使用https访问如下:https://my.worker01.local:30000/#!/login 即可以验证dashboard是否安装成功.

2.8 登录Dashboard

通过kubectl获取secret,然后在获取详细的token,复制到上一步中登录页选择Token(令牌), 即可以登录

### 查看秘钥, 列出所有kube-system命名空间下秘钥kubectl -n kube-system get secretNAME                                             TYPE                                  DATA   AGEclusterrole-aggregation-controller-token-vxzmt   kubernetes.io/service-account-token   3      10h### 查看token, 这里选择clusterrole-aggregation-controller-token-*****的秘钥kubectl -n kube-system describe secret clusterrole-aggregation-controller-token-vxzmtName:         clusterrole-aggregation-controller-token-vxzmtNamespace:    kube-systemLabels:       <none>Annotations:  kubernetes.io/service-account.name: clusterrole-aggregation-controller              kubernetes.io/service-account.uid: dfb9d9c3-f646-11e8-9861-000c29b7e604Type:  kubernetes.io/service-account-tokenData====ca.crt:     1025 bytesnamespace:  11 bytestoken:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJjbHVzdGVycm9sZS1hZ2dyZWdhdGlvbi1jb250cm9sbGVyLXRva2VuLXZ4em10Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImNsdXN0ZXJyb2xlLWFnZ3JlZ2F0aW9uLWNvbnRyb2xsZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJkZmI5ZDljMy1mNjQ2LTExZTgtOTg2MS0wMDBjMjliN2U2MDQiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06Y2x1c3RlcnJvbGUtYWdncmVnYXRpb24tY29udHJvbGxlciJ9.MfjiMrmyKl1GUci1ivD5RNrzo_s6wxXwFzgM_3NIAmTCfRQreYdhat3yyd6agaCLpUResnNC0ZGRi4CBs_Jgjqkovhb80V05_YVIvCrlf7xHxBKEtGfkJ-qLDvtAwR5zrXNNd0Ge8hTRxw67gZ3lGMkPpw5nfWmc0rzk90xTTQD1vAtrHMvxjr3dVXph5rT8GNuCSXA_J6o2AwYUbaKCc2ugdx8t8zX6oFJfVcw0ZNYYYIyxoXzzfhdppORtKR9t9v60KsI_-q0TxY-TU-JBtzUJU-hL6lB5MOgoBWpbQiV-aG8Ov74nDC54-DH7EhYEzzsLci6uUQCPlHNvLo_J2A

Kubernetes集群的搭建方法

3. 遇到问题

4. 效率&技巧

4.1 kubeadm 自动完成

使用 kubeadm completion --help 查看使用详情,这里直接贴出bash的自动完成命令

kubeadm completion bash > ~/.kube/kubeadm_completion.bash.incprintf "\n# Kubeadm shell completion\nsource '$HOME/.kube/kubeadm_completion.bash.inc'\n" >> $HOME/.bash_profilesource $HOME/.bash_profile
4.2 kubectl 自动完成

使用 kubectl completion --help 查看使用详情,这里直接贴出bash的自动完成命令, 注意第二行命令不要一次性复制,先复制第一行printf再复制剩余.

kubectl completion bash > ~/.kube/completion.bash.incprintf "# Kubectl shell completionsource '$HOME/.kube/completion.bash.inc'" >> $HOME/.bash_profilesource $HOME/.bash_profile
4.3 使用私有 docker registry

创建 secret, 然后增加添加 imagePullSecrets 配置在指定image的地方. 创建和查看secret如下:

kubectl create secret docker-registry regcred --docker-server=registry.domain.cn:5001 --docker-username=xxxxx --docker-password=xxxxx --docker-email=jimmy.w@aliyun.comkubectl get secret regcred --output=yamlkubectl get secret regcred --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode

配置 imagePullSecrets 如下:

... ...containers:- name: mirage  image: registry.domain.cn:5001/mirage:latestimagePullSecrets:  - name:  regcredports:- containerPort: 3008  protocol: TCPvolumeMounts:... ...
4.4 使用 HostAliases 向 Pod /etc/hosts 文件添加条目

如果有一些特别的入口或者以前放置到/etc/hosts中的可以通过配置hostAliases进行配置, 作用和本地的hosts一样, 且这些hostAlieas配置会放置到容器/etc/hosts中, 具体使用如下:

apiVersion: v1kind: Podmetadata:  name: hostaliases-podspec:  hostAliases:  - ip: "127.0.0.1"    hostnames:    - "foo.local"    - "bar.local"  - ip: "10.1.2.3"    hostnames:    - "foo.remote"    - "bar.remote"  containers:  - name: cat-hosts    image: busybox    command:    - cat    args:    - "/etc/hosts"

到此,相信大家对“Kubernetes集群的搭建方法”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯