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

官方提供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-master 192.168.183.160
    k8s-node1 192.168.183.162
    k8s-node2 192.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关系图:
快速搭建Kubernetes容器集群平台(kubeadm)

安装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容器集群平台(kubeadm)

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

上一篇:构建k8s一主两副集群


下一篇:Python追加到嵌套列表,索引超出范围