ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

快速搭建Kubernetes容器集群平台(kubeadm)

2021-12-17 11:02:01  阅读:167  来源: 互联网

标签:kubernetes Kubernetes -- master 集群 kubeadm k8s root


官方提供Kubernetes部署3种方式

  • minikube

Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用。不能用于生产环境。

官方文档: https://kubernetes.io/docs/setup/minikube/

  • kubeadm

kubeadm可帮助你快速部署一套kubernetes集群。kubeadm设计目的为新用户开始尝试kubernetes提供一种简单的方法。目前是Beta版。

官方文档: https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
https://kubernetes.io/docs/setup/independent/install-kubeadm/

  • 二进制包

从官方下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。目前企业生产环境中主要使用该方式。
下载地址: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.11.md#v1113

1.安装要求

  • 操作系统

  • CentOS 7.5

  • 内存2GB + ,2核CPU +

  • 集群节点之间可以通信

  • 每个节点唯一主机名,MAC地址和product_uuid

    • 检查MAC地址:使用ip link或者ifconfig -a
    • 检查product_uuid:cat /sys/class/dmi/id/product_uuid
  • 禁止swap分区。这样才能使kubelet正常工作

  • 服务器规划:

    角色IP
    k8s-master192.168.183.160
    k8s-node1192.168.183.162
    k8s-node2192.168.183.163

2.准备环境(所有节点都要执行;除了配置hosts外)

关闭防火墙:

[root@k8s-master ~]# systemctl stop firewalld && systemctl disable firewalld

关闭selinux:

[root@k8s-master ~]# sed -i 's/enforcing/disabled/' /etc/selinux/config 
[root@k8s-master ~]# setenforce 0

关闭swap:

# 临时
[root@k8s-master ~]# swapoff -a 
# 永久
[root@k8s-master ~]# vim /etc/fstab  

添加主机名与IP对应关系:

#在master添加hosts;其他节点不用执行
[root@k8s-master ~]# cat >> /etc/hosts << EOF
192.168.183.160 k8s-master
192.168.183.162 k8s-node1
192.168.183.163 k8s-node2
EOF

将桥接的IPv4流量传递到iptables的链

[root@k8s-master ~]# cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

# 生效
[root@k8s-master ~]# sysctl --system  

同步时间:

[root@k8s-master ~]# yum install ntpdate -y
[root@k8s-master ~]# ntpdate  ntp.api.bz

3.安装Docker(所有节点执行)

Docker与Kubernetes关系图:
在这里插入图片描述

安装Docker

#换成国内镜像源
[root@k8s-master ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

#安装Docker并启动和设置开机自启
[root@k8s-master ~]# yum install -y docker-ce-18.06.1.ce-3.el7
[root@k8s-master ~]# systemctl enable docker && systemctl start docker

#配置加速器
[root@k8s-master ~]# cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF
#重新启动验证是否成功
[root@k8s-master ~]# systemctl restart docker

4.安装kubeadm,kubelet和kubectl(所有节点执行)

  • kubeadm: 引导集群的命令
  • kubelet:集群中运行任务的代理程序
  • kubectl:命令行管理工具

4.1添加阿里云YUM软件源

[root@k8s-master ~]# cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

4.2安装kubeadm,kubelet和kubectl

[root@k8s-master ~]# yum install -y kubelet-1.17.0 kubeadm-1.17.0 kubectl-1.17.0
[root@k8s-master ~]# systemctl enable kubelet.service 

5.使用kubeadm创建单个Master集群

5.1初始化Master

[root@k8s-master ~]# kubeadm init \
--apiserver-advertise-address=192.168.183.160 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.17.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16

... 

Your Kubernetes master has initialized successfully!
 
kubeadm join 192.168.183.160:6443 --token 61l0hl.ducgh36sqy6g0wkv \
>     --discovery-token-ca-cert-hash sha256:3f03be4b0d08126b008c2e7ba48a2ccb501054fe0bdb8089aa869ec1d11fd99e 

#初始化完成后,最后会输出一个join命令,先记住,下面有用。拷贝kubectl使用的连接k8s认证文件到默认路径: 
[root@k8s-master ~]# mkdir -p $HOME/.kube
[root@k8s-master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

5.2安装Pod网络插件

可能会因网速问题失败,可以多试几次;如果实在不行,那就更换镜像地址。

[root@k8s-master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

更换镜像地址:

[root@k8s-master ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

vim kube-flannel.yml
      - name: install-cni
        image: quay.io/coreos/flannel:v0.15.1
修改成:
      - name: install-cni
        image: lizhenliang/flannel:v0.15.1
    
      - name: kube-flannel
        image: quay.io/coreos/flannel:v0.15.1
修改成:
      - name: kube-flannel
        image: lizhenliang/flannel:v0.15.1

5.3加入工作节点

在Node节点切换到root账号执行:

[root@k8s-node1 ~]# kubeadm join 192.168.183.160:6443 --token 61l0hl.ducgh36sqy6g0wkv \
>     --discovery-token-ca-cert-hash sha256:3f03be4b0d08126b008c2e7ba48a2ccb501054fe0bdb8089aa869ec1d11fd99e 


格式:kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>

6. kubernetes dashboard

先将yaml文件下载下来,修改里面的Service NodePort类型。

[root@k8s-master ~]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml

修改Service:

[root@k8s-master ~]# vim recommended.yaml 
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001

修改完成后执行kubectl apply -f kubernetes-dashboard.yaml即可。
创建service account并绑定默认cluster-admin管理员集群角色

# 创建用户
[root@k8s-master ~]# kubectl create serviceaccount dashboard-admin -n kube-system
serviceaccount/dashboard-admin created

# 用户授权
[root@k8s-master ~]# kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
clusterrolebinding.rbac.authorization.k8s.io/dashboard-admin created

# 获取用户Token并将获取到的Token复制浏览器中
[root@k8s-master ~]# kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

在这里插入图片描述

在这里插入图片描述

标签:kubernetes,Kubernetes,--,master,集群,kubeadm,k8s,root
来源: https://blog.csdn.net/weixin_46329906/article/details/121907880

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有