联系客服
客服二维码

联系客服获取更多资料

微信号:LingLab1

客服电话:010-82185409

意见反馈
关注我们
关注公众号

关注公众号

linglab语言实验室

回到顶部
4.3Kubernetes安装

234 阅读 2020-09-02 09:45:02 上传

以下文章来源于 西语语言学工作坊

Kubernetes安装


Kubernetes安装






建议大家在使用自己电脑时,直接使用Minikube。

Minikube是一个易于在本地运行Kubernetes的工具,可在你的笔记本电脑上的虚拟机内轻松创建单机版 Kubernetes集群。

Minikube参考:https://github.com/kubernetes/minikube


minikube安装







软硬件环境

  • CentOS 7

  • kubectl

  • Virtualbox

  • VT-x/AMD-v 虚拟化必须在 BIOS 中开启,检查命令:egrep --color 'vmx|svm' /proc/cpuinfo

切换到aliyun镜像

    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backupwget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
      cat </etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/enabled=1gpgcheck=1repo_gpgcheck=1gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF


      安装VirtualBox依赖包

        yum -y install opusfile libvpx libXt libXmu SDL


        下载并安装VirtualBox

          axel -n 10 https://download.virtualbox.org/virtualbox/6.0.10/VirtualBox-6.0-6.0.10_132072_el7-1.x86_64.rpmrpm -ivh VirtualBox-6.0-6.0.10_132072_el7-1.x86_64.rpm 


          下载并安装minikube

            curl -Lo minikube http://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.2.0/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/minikube start --registry-mirror=https://registry.docker-cn.com


            安装kubectl

              yum install -y kubectl


              启动minikube dashboard

                minikube dashboard

                注:启动完成后,根据安装提示信息,在本地访问。


                Kubernetes集群安装






                安装目标

                • 1个master,4个node

                • Kubernetes安装dashboard,并开启远程访问能力

                • Kubernetes使用Calico网络

                机器配置要求

                • 一台或多台运行 deb/rpm 包管理器的操作系统,例如:Ubuntu或者CentOS 7;

                • Master节点:2核心4GB以上;

                • 工作节点:至少4核心16GB,根据需要运行的APP数量进行配置。

                环境准备

                一共5台机器,192.168.7.49-53

                配置Linux国内源

                  wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repowget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.reposed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo


                  配置kubernetes国内源

                    cat </etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/enabled=1gpgcheck=1repo_gpgcheck=1gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF


                    所有节点安装docker

                      yum install -y yum-utilsyum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repoyum install docker-ce docker-ce-cli containerd.io


                      所有节点安装kubelet、kubeadm

                        yum -y install kubelet kubeadm


                        修改操作系统默认设置

                        设置主机名和hosts

                        每台主机设置不同的主机名

                          hostnamectl set-hostname node-kubeadm-XXX


                          配置每台主机的hosts

                            cat > /etc/hosts <127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4::1         localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.7.49 node-kubeadm-49192.168.7.50 node-kubeadm-50192.168.7.51 node-kubeadm-51192.168.7.52 node-kubeadm-52192.168.7.53 node-kubeadm-53EOF


                            设置时区

                              timedatectl set-timezone Asia/Shanghai


                              设置时间同步

                                yum install chrony -ysystemctl start chronyd && systemctl enable chronyd


                                降低交换分区使用比例

                                  echo "vm.swappiness=0" >> /etc/sysctl.conf && sysctl -p


                                  关闭防火墙

                                    systemctl disable firewalldsystemctl stop firewalld


                                    确认关闭状态

                                      # iptables -L -nChain INPUT (policy ACCEPT)target     prot opt source               destination         
                                      Chain FORWARD (policy ACCEPT)target     prot opt source               destination        
                                      Chain OUTPUT (policy ACCEPT)target     prot opt source               destination  


                                      关闭SELinux

                                        setenforce 0sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config


                                        检查修改结果

                                          cat /etc/selinux/config……SELINUX=disabled……


                                          所有节点设置Docker

                                            cat > /etc/docker/daemon.json <{  "exec-opts": ["native.cgroupdriver=systemd"],  "log-driver": "json-file",  "log-opts": {    "max-size": "100m"  },  "registry-mirrors":["http://registry.docker-cn.com"],  "storage-driver": "overlay2",  "storage-opts": [    "overlay2.override_kernel_check=true"  ]}EOF


                                              mkdir -p /etc/systemd/system/docker.service.d
                                              # Restart Dockersystemctl daemon-reloadsystemctl restart docker


                                              所有节点修改网络配置配置

                                                cat </etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOFsysctl --system


                                                所有节点确认加载了br_netfilter模块

                                                  lsmod | grep br_netfilter


                                                  如果没有加载模块则手动加载模块

                                                    modprobe br_netfilter


                                                    启动docker和kubelet

                                                      systemctl enable docker && systemctl start dockersystemctl enable kubelet && systemctl start kubelet


                                                      获取默认配置

                                                        kubeadm config print init-defaults > init-config.yml


                                                        init-config.yml修改点

                                                          apiVersion: kubeadm.k8s.io/v1beta2clusterName: cnovit-kubernetesimageRepository: registry.cn-hangzhou.aliyuncs.com/google_containerskind: ClusterConfigurationkubernetesVersion: v1.18networking:  podSubnet: 10.32.0.0/16


                                                          下载所需镜像

                                                            kubeadm config images pull --config=init-config.yml


                                                            执行初始化

                                                              kubeadm init --config=init-config.yml 


                                                                [addons] Applied essential addon: kube-proxy
                                                                Your Kubernetes control-plane 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/config
                                                                You 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/
                                                                Then you can join any number of worker nodes by running the following on each as root:
                                                                kubeadm join 192.168.7.49:6443 --token x872ma.0sjrutrm5yg7pdz0 \    --discovery-token-ca-cert-hash sha256:23fc57c7a5bdde795f9ba5f8f7b8e9c6df53c80d14360d3123ae9fabdc04ec91


                                                                在工作节点运行加入节点命令

                                                                  kubeadm join 192.168.7.49:6443 --token x872ma.0sjrutrm5yg7pdz0 \    --discovery-token-ca-cert-hash sha256:23fc57c7a5bdde795f9ba5f8f7b8e9c6df53c80d14360d3123ae9fabdc04ec91 


                                                                  主节点执行检查节点加入情况

                                                                    # kubectl get nodesnode-kubeadm-49   NotReady   master   97s   v1.18node-kubeadm-50   NotReady   <none>   52s   v1.18node-kubeadm-51   NotReady   <none>   50s   v1.18node-kubeadm-52   NotReady   <none>   46s   v1.18node-kubeadm-53   NotReady   <none>   47s   v1.18


                                                                    使用Calico配置Kubernetes网络

                                                                    以下配置是50节点以内的配置。还可以考虑使用Flannel。

                                                                      curl https://docs.projectcalico.org/v3.8/manifests/calico.yaml -O


                                                                      设置子网,和init-config.yml保持一致

                                                                        sed -i -e "s?192.168.0.0/16?10.32.0.0/16?g" calico.yaml


                                                                        应用修改后的配置

                                                                          kubectl apply -f calico.yaml


                                                                          验证所有节点都running

                                                                            # kubectl get pods --all-namespacesNAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGEkube-system   calico-kube-controllers-65b8787765-srwz2   0/1     Pending   0          8skube-system   calico-node-68rwc                          0/1     Running   0          8skube-system   calico-node-7qtzb                          0/1     Running   0          8skube-system   calico-node-9tnq4                          0/1     Running   0          8skube-system   calico-node-d78fc                          0/1     Running   0          8skube-system   calico-node-tqsw8                          0/1     Running   0          8skube-system   coredns-6967fb4995-bvpfb                   0/1     Running   0          4m53skube-system   coredns-6967fb4995-cbtnr                   0/1     Running   0          4m53skube-system   etcd-node-kubeadm-249                      1/1     Running   0          4m7skube-system   kube-apiserver-node-kubeadm-249            1/1     Running   0          3m54skube-system   kube-controller-manager-node-kubeadm-249   1/1     Running   0          4m8skube-system   kube-proxy-29wf8                           1/1     Running   0          4m24skube-system   kube-proxy-7f6q8                           1/1     Running   0          4m27skube-system   kube-proxy-7gnwj                           1/1     Running   0          4m52skube-system   kube-proxy-8sp2f                           1/1     Running   0          4m22skube-system   kube-proxy-9rwrk                           1/1     Running   0          4m29skube-system   kube-scheduler-node-kubeadm-249            1/1     Running   0          4m13s


                                                                            下载页面管理配置文件

                                                                              wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml


                                                                              修改镜像下载地址

                                                                                kind: DeploymentapiVersion: apps/v1spec:  template:    spec:      containers:      - name: kubernetes-dashboard        image: registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1


                                                                                编辑镜像配置

                                                                                  kubectl -n kube-system edit service kubernetes-dashboard


                                                                                  修改 type: ClusterIP to type: NodePort并保存

                                                                                    kind: Servicemetadata:  creationTimestamp: "2019-08-19T09:38:23Z"  labels:    k8s-app: kubernetes-dashboard  name: kubernetes-dashboard  namespace: kube-system  resourceVersion: "9852"  selfLink: /api/v1/namespaces/kube-system/services/kubernetes-dashboard  uid: 02e37aa9-9c31-4fd4-9af0-5980fc1190a6spec:  clusterIP: 10.104.46.251  ports:  - port: 443    protocol: TCP    targetPort: 8443  selector:    k8s-app: kubernetes-dashboard  sessionAffinity: None  type: NodePort


                                                                                    获取本地映射端口

                                                                                      # kubectl -n kube-system get service kubernetes-dashboardNAME                   TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGEkubernetes-dashboard   NodePort   10.104.46.251   <none>        443:31328/TCP   58s

                                                                                      管理页面访问地址是:https://192.168.7.49:31328


                                                                                      创建管理用户

                                                                                      创建dashboard-adminuser.yaml文件

                                                                                        apiVersion: v1kind: ServiceAccountmetadata:  name: admin-user  namespace: kube-system---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata:  name: admin-userroleRef:  apiGroup: rbac.authorization.k8s.io  kind: ClusterRole  name: cluster-adminsubjects:- kind: ServiceAccount  name: admin-user  namespace: kube-system


                                                                                        创建用户

                                                                                          kubectl apply -f dashboard-adminuser.yaml


                                                                                          获取管理用户token

                                                                                            # kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')Name:         admin-user-token-2h9vxNamespace:    kube-systemLabels:Annotations:  kubernetes.io/service-account.name: admin-user              kubernetes.io/service-account.uid: d150666c-fc60-49d6-bbb3-84656e4497e7
                                                                                            Type:  kubernetes.io/service-account-token
                                                                                            Data====ca.crt:     1025 bytesnamespace:  11 bytestoken:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL......

                                                                                            使用令牌登录https://192.168.7.49:31328


                                                                                            注:

                                                                                            Calico网络配置:https://docs.projectcalico.org/v3.8/getting-started/kubernetes/

                                                                                            管理界面安装:https://github.com/kubernetes/dashboard/wiki/Installation

                                                                                            单节点部署时使用NodePort配置管理界面远程访问:https://github.com/kubernetes/dashboard/wiki/Accessing-Dashboard---1.7.X-and-above

                                                                                            创建访问管理界面的用户:https://github.com/kubernetes/dashboard/wiki/Creating-sample-user


                                                                                            点赞
                                                                                            收藏
                                                                                            表情
                                                                                            图片
                                                                                            附件