centos 7 安装 kubernetes

2021-06-02 18:04

阅读:790

YPE html>

标签:网络方案   stat   base   arch   资源   tag   文件中   protoc   this   

1、参考文章

https://blog.51cto.com/3241766/2405624

(这个文章写的条理挺好的,但是其中有好几个地方会存在一些问题,在此文章最后面已经写明,可以参考一下)

https://www.cnblogs.com/Erik_Xu/p/8783789.html

 

2、软件版本相关概览

技术图片

 Centos 7.6安装参考:

https://www.cnblogs.com/zhuzi91/p/12356856.html 

 

安装步骤包含如下部分

1、docker 安装(两个节点都要执行)

2、k8s 安装准备工作(两个节点都要执行)

3、Master 节点安装

4、Node 节点安装

5、DashBoard 安装(这个部分浏览器访问的时候一直不出来,暂时还不知道是什么原因)

6、集群测试

 

1、Docker 安装(两个节点都要执行)

1>、docker 安装
    1)、移除旧版本的 docker
    yum remove docker docker-common docker-selinux docker-engine
    yum remove docker-ce
    rm -rf /var/lib/docker

    2)、查看有没有安装 
    rpm -qa|grep device-mapper-persistent-data
    rpm -qa|grep lvm2

    3)、安装
    yum install -y yum-utils device-mapper-persistent-data lvm2

    4)、配置镜像地址
    yum-config-manager --add-repo  https://download.docker.com/linux/centos/docker-ce.repo

    5)、然后修改镜像地址,更改为国内的,这样可以下载快一点
    vim /etc/yum.repos.d/docker-ce.repo
    修改地址为清华的 
    %s@https://download.docker.com@https://mirrors.tuna.tsinghua.edu.cn/docker-ce

    6)、更新缓存 
    yum makecache fast


2>、docker ce安装
    1)、安装最新版的 docker-ce
    yum install -y docker-ce docker-ce-cli containerd.io
    ##安装指定版本docer-ce 可使用以下命令查看
    yum list docker-ce.x86_64 --showduplicates |sort -r

    ##安装完成之后可以使用命令查看 
    docker version

3>、配置 docker 镜像加速
    vim /etc/docker/daemon.json
    {
        "registry-mirrors" : ["https://v16stybc.mirror.aliyuncs.com"]
    }

    ##通知 systemd 重载此配置文件
    systemctl daemon-reload

    ##设置开机启动
    systemctl enable docker 

    ##启动 docker
    systemctl start docker

2、k8s 准备工作相关(两个节点都要执行)

k8s 相关配置
1)、设置系统主机名以及 Host 文件的相互解析
    hostnamectl  set-hostname  k8s-master01

2)、修改 hosts 文件
    vim /etc/hosts
    192.168.56.2 k8s-master01
    192.168.56.3 node01

3)、验证 uuid 和 mac 地址(enp0s3 根据自己的进入相应的目录,ip addr 看一下网卡的名字即可)
cat /sys/class/net/enp0s3/address
cat /sys/class/dmi/id/product_uuid

4)、安装依赖包
    yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wgetvimnet-tools git

5)、设置防火墙为 Iptables 并设置空规则
    systemctl  stop firewalld  &&  systemctl  disable firewalld

    yum -y install iptables-services  &&  systemctl  start iptables  &&  systemctl  enable iptables&&  iptables -F  &&  service iptables save

6)、关闭 SELINUX(临时禁用&&永久禁用)
    swapoff -a && sed -i / swap / s/^\(.*\)$/#\1/g /etc/fstab
    setenforce 0 && sed -i s/^SELINUX=.*/SELINUX=disabled/ /etc/selinux/config

7)、调整内核参数,对于 K8S
    vim kubernetes.conf
    net.bridge.bridge-nf-call-iptables=1
    net.bridge.bridge-nf-call-ip6tables=1
    net.ipv4.ip_forward=1
    net.ipv4.tcp_tw_recycle=0
    # 禁止使用 swap 空间,只有当系统 OOM 时才允许使用它
    vm.swappiness=0 
    # 不检查物理内存是否够用
    vm.overcommit_memory=1 
    # 开启 OOM
    fs.inotify.max_user_instances=8192
    vm.panic_on_oom=0 
    fs.inotify.max_user_watches=1048576
    fs.file-max=52706963
    fs.nr_open=52706963
    net.ipv6.conf.all.disable_ipv6=1
    net.netfilter.nf_conntrack_max=2310720

    cp kubernetes.conf  /etc/sysctl.d/kubernetes.conf

    sysctl -p /etc/sysctl.d/kubernetes.conf


8)、 修改Cgroup Driver
    1>、修改daemon.json
    [root@k8s-master01 ~]# vim /etc/docker/daemon.json 
    {
      "registry-mirrors": ["https://v16stybc.mirror.aliyuncs.com"],
      "exec-opts": ["native.cgroupdriver=systemd"]//新增这行
    }
    2>、 重新加载docker
    [root@k8s-master01 ~]# systemctl daemon-reload && systemctl restart docker
    
    修改cgroupdriver是为了消除告警:
    [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/


9)、新增 k8s 源
    [root@k8s-master01 ~]#vim /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

    [] 中括号中的是repository id,唯一,用来标识不同仓库
    name 仓库名称,自定义
    baseurl 仓库地址
    enable 是否启用该仓库,默认为1表示启用
    gpgcheck 是否验证从该仓库获得程序包的合法性,1为验证
    repo_gpgcheck 是否验证元数据的合法性 元数据就是程序包列表,1为验证
    gpgkey=URL 数字签名的公钥文件所在位置,如果gpgcheck值为1,此处就需要指定gpgkey文件的位置,如果gpgcheck值为0就不需要此项了

    更新缓存
    [root@k8s-master01 ~]# yum clean all
    [root@k8s-master01 ~]# yum -y makecache


10)、调整系统时区,设置系统时区为中国/上海
    timedatectl set-timezone Asia/Shanghai

    将当前的 UTC 时间写入硬件时钟
    timedatectl set-local-rtc 0

    重启依赖于系统时间的服务
    systemctl restart rsyslog
    systemctl restart crond

11)、关闭系统不需要的服务
    systemctl stop postfix && systemctl disable postfix

12)、设置 rsyslogd 和 systemd journald
    mkdir /var/log/journal 

    持久化保存日志的目录
    mkdir /etc/systemd/journald.conf.d

    vim /etc/systemd/journald.conf.d/99-prophet.conf 
    Journal]
    #持久化保存到磁盘
    Storage=persistent
    # 压缩历史日志
    Compress=yes
    SyncIntervalSec=5
    mRateLimitInterval=30s
    RateLimitBurst=1000
    # 最大占用空间 10G
    SystemMaxUse=10G
    # 单日志文件最大 200M
    SystemMaxFileSize=200M
    # 日志保存时间 2 周
    MaxRetentionSec=2week
    # 不将日志转发到 
    syslogForwardToSyslog=no

    systemctl restart systemd-journald

13)、升级系统内核为 4.44CentOS 7.x 
    系统自带的 3.10.x 内核存在一些 Bugs,导致运行的 Docker、Kubernetes 不稳定
    rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

    安装完成后检查 /boot/grub2/grub.cfg 中对应内核 menuentry 中是否包含 initrd16 配置,如果没有,再安装一次!
    yum --enablerepo=elrepo-kernel install -y kernel-lt

    设置开机从新内核启动
    grub2-set-default CentOS Linux (4.4.189-1.el7.elrepo.x86_64) 7 (Core)

 

3、master 节点安装

1. 版本查看
[root@k8s-master01 ~]# yum list kubelet --showduplicates | sort -r 

2. 安装kubelet、kubeadm和kubectl(不指定版本,默认用的就是最新版本)
    yum install -y kubelet kubeadm kubectl

    2.1.安装包说明
    kubelet 运行在集群所有节点上,用于启动Pod和容器等对象的工具
    kubeadm 用于初始化集群,启动集群的命令工具
    kubectl 用于和集群通信的命令行,通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件

    2.2.启动kubelet并设置开机启动
    [root@k8s-master01 ~]# systemctl enable kubelet && systemctl start kubelet

    2.3.kubelet命令补全
    [root@k8s-master01 ~]## echo "source " >> ~/.bash_profile
    [root@k8s-master01 ~]# source ~/.bash_profile 


3. 下载镜像
    3.1 Kubernetes几乎所有的安装组件和Docker镜像都放在goolge自己的网站上,直接访问可能会有网络问题,这里的解决办法是从阿里云镜像仓库下载镜像,拉取到本地以后改回默认的镜像tag。

    [root@k8s-master01 ~]## vim image.sh 
    #!/bin/bash
    url=gcr.azk8s.cn/google-containers
    version=v1.17.3
    images=(`kubeadm config images list --kubernetes-version=$version|awk -F / {print $2}`)
    for imagename in ${images[@]} ; do
          docker pull $url/$imagename
          docker tag $url/$imagename k8s.gcr.io/$imagename
          docker rmi -f $url/$imagename
    done
    
    url为阿里云镜像仓库地址,version为安装的kubernetes版本。

    3.2 下载镜像
    1)、首先要给 image.sh 赋于执行权限
    chmod u+x ./image.sh

    2)、运行脚本image.sh,下载指定版本的镜像
    ./image.sh

4.初始化 master
    4.1 初始化 
    [root@k8s-master01 ~]# kubeadm init --apiserver-advertise-address 192.168.56.2 --pod-network-cidr=10.244.0.0/16
    apiserver-advertise-address指定master的interface,pod-network-cidr指定Pod网络的范围,这里使用flannel网络方案

    记录kubeadm join的输出,后面需要这个命令将各个节点加入集群中。输出大概如下的内容:
    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.56.2:6443 --token f09fag.fohc5f0v9eb4ail5         --discovery-token-ca-cert-hash sha256:5c08d18980a8e0c251664fda92427814a02c31b152ac553b6539b5123067ce86 

    4.2 加载环境变量
     [root@k8s-master01 ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
    [root@k8s-master01 ~]# source ~/.bash_profile 
    
    本文所有操作都在root用户下执行,若为非root用户,则执行如下操作:
    mkdir -p $HOME/.kube
    cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    chown $(id -u):$(id -g) $HOME/.kube/config

5. 安装pod网络(如果此命令执行不成功,可能是文件拉取的问题,直接把这个文件下载到本地即可)
[root@k8s-master01 ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/
kube-flannel.yml

下载本地后执行:(直接打开网址,复制到本地文件中)
[root@k8s-master01 ~]#kubectl apply -f kube-flannel.yml


6. master节点配置
    taint:污点的意思。如果一个节点被打上了污点,那么pod是不允许运行在这个节点上面的

    6.1 删除master节点默认污点
    默认情况下集群不会在master上调度pod,如果偏想在master上调度Pod,可以执行如下操作:

    查看污点:
    [root@k8s-master01 ~]# kubectl describe node master|grep -i taints
    Taints:             node-role.kubernetes.io/master:NoSchedule
    删除默认污点:

    [root@k8s-master01 ~]# kubectl taint nodes master node-role.kubernetes.io/master-
    node/master untainted
    6.2 污点机制
    语法
    kubectl taint node [node] key=value[effect]   
         其中[effect] 可取值: [ NoSchedule | PreferNoSchedule | NoExecute ]
          NoSchedule: 一定不能被调度
          PreferNoSchedule: 尽量不要调度
          NoExecute: 不仅不会调度, 还会驱逐Node上已有的Pod
    
    打污点
    [root@k8s-master01 ~]# kubectl taint node master key1=value1:NoSchedule
    node/master tainted
    [root@k8s-master01 ~]# kubectl describe node master|grep -i taints
    Taints:             key1=value1:NoSchedule
    key为key1,value为value1(value可以为空),effect为NoSchedule表示一定不能被调度

    删除污点:
    [root@k8s-master01 ~]# kubectl taint nodes master  key1-     
    node/master untainted
    [root@k8s-master01 ~]# kubectl describe node master|grep -i taints
    Taints:             
    删除指定key所有的effect,‘-’表示移除所有以key1为键的污点

4、Node节点安装

1)、查看令牌
[root@k8s-master01 ~]# kubeadm token list
TOKEN                     TTL         EXPIRES                     USAGES                   DESCRIPTION                                                EXTRA GROUPS
dnpkej.113e5cokaq30qcra   18h         2020-02-25T12:12:21+08:00   authentication,signing   The default bootstrap token generated by kubeadm init.   system:bootstrappers:kubeadm:default-node-token

2)、 生成新的令牌(如果过期的话)
[root@k8s-master01 ~]# kubeadm token create
dnpkej.113e5cokaq30qcra 

3)、 生成新的加密串
[root@k8s-master01 ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null |    openssl dgst -sha256 -hex | sed s/^.* //
63de5412694706097a440cb9375d5e06207dfdf225579aa04b489b6470ea46c3

4)、 node节点加入集群
在node节点上分别执行如下操作:
[root@node01 tmp]# kubeadm join 192.168.56.2:6443 --token dnpkej.113e5cokaq30qcra     --discovery-token-ca-cert-hash sha256:63de5412694706097a440cb9375d5e06207dfdf225579aa04b489b6470ea46c3

5、Dashboard安装

1. 下载yaml
[root@k8s-master01 ~]# wget  https://github.com/yeyinzhu321/Centos7.6-install-k8s-v1.14.2-cluster/blob/master/kubernetes-dashboard.yaml

2. 配置yaml
2.1 修改镜像地址
sed -i s/k8s.gcr.io/registry.cn-hangzhou.aliyuncs.com\/kuberneters/g kubernetes-dashboard.yaml
由于默认的镜像仓库网络访问不通,故改成阿里镜像

2.2 外网访问
sed -i /targetPort:/a\ \ \ \ \ \ nodePort: 30001\n\ \ type: NodePort kubernetes-dashboard.yaml
配置NodePort,外部通过https://NodeIp:NodePort 访问Dashboard,此时端口为30001

2.3 新增管理员帐号(在文件最后添加如下的配置)
vim kubernetes-dashboard.yaml 
---
# ------------------- dashboard-admin ------------------- #
apiVersion: v1
kind: ServiceAccount
metadata:
  name: dashboard-admin
  namespace: kube-system

---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: dashboard-admin
subjects:
- kind: ServiceAccount
  name: dashboard-admin
  namespace: kube-system
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
创建超级管理员的账号用于登录Dashboard

3. 部署访问
3.1 部署Dashboard
[root@k8s-master01 ~]# kubectl apply -f kubernetes-dashboard.yaml 

3.2 状态查看
[root@k8s-master01 ~]# kubectl get deployment kubernetes-dashboard -n kube-system
[root@k8s-master01 ~]# kubectl get pods -n kube-system -o wide
[root@k8s-master01 ~]# kubectl get services -n kube-system

3.3 令牌查看
kubectl describe secrets -n kube-system dashboard-admin
令牌为:
eyJhbGciOiJSUzI1NiIsImtpZCI6InZDSWF3X1JBcjB6ZGFzbF9pZ0N4a0FKTEREMTFtZUJGVzlFVUJOdUNMMkEifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tc21tdzkiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiYmE5MzExYzMtMDMyOC00ZTUzLTg0M2MtNjZhN2I4YzA4Njc3Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.xi7exXIYJYr1r8epqdDqajmWK_5vIqcqvNhjEkmkkOstsH5eiFdlKvyIYNm416-98mD5CPYRWq4aSl1DmXYa1un6a37X0WV0bKaDDEj-oCCnFs5Sucol7sCs5IGMZ8xVRwQCYseLlPGJCuY0u3d-Fx3BtuiHlvuHKLIMEgNWHOIgcCX1bzArK7tBBQkzT6XJrwoij6NuV4cxbegTQ6WNbAAlx-m862lfzP9mcK_fM5fOvAaxePEnMMvqb8kQ4bgTmMKr2DqlS-2F4t6eiOPQx8vFZ-LURopOgAIC8akbbsfdnB1TJ9aaYdxqwG3BggR2mv1qEcp4dmdXKkn4tBeHnw


3.4 访问 https://NodeIp:30001
Dashboard提供了可以实现集群管理、工作负载、服务发现和负载均衡、存储、字典配置、日志视图等功能。

 

6、集群测试

1. 部署应用
1.1 命令方式
[root@k8s-master01 ~]# kubectl run httpd-app --image=httpd --replicas=2

通过命令行方式部署apache服务

1.2 配置文件方式
vim nginx.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-demo
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

---

apiVersion: v1
kind: Service
metadata:
  name: nginx-demo
spec:
  type: NodePort
  ports:
  - name: nginx
    nodePort: 30000
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx

[root@k8s-master01 ~]# kubectl apply -f nginx.yml 
deployment.extensions/nginx created
通过配置文件方式部署nginx服务

2. 状态查看
2.1 查看节点状态
[root@k8s-master01 ~]# kubectl get nodes
NAME           STATUS   ROLES    AGE     VERSION
k8s-master01   Ready    master   5h33m   v1.17.3
node01         Ready       5h32m   v1.17.3

2.2 查看pod状态
[root@k8s-master01 ~]# kubectl get pod --all-namespaces
NAMESPACE     NAME                                    READY   STATUS    RESTARTS   AGE
default       nginx-demo-85ff79dd56-svdbl             1/1     Running   0          4h12m
kube-system   coredns-6955765f44-498gl                1/1     Running   2          5h33m
kube-system   coredns-6955765f44-5895j                1/1     Running   2          5h33m
kube-system   etcd-k8s-master01                       1/1     Running   1          5h34m
kube-system   kube-apiserver-k8s-master01             1/1     Running   1          5h34m
kube-system   kube-controller-manager-k8s-master01    1/1     Running   1          5h34m
kube-system   kube-flannel-ds-amd64-f8f44             1/1     Running   0          4h55m
kube-system   kube-flannel-ds-amd64-krhxq             1/1     Running   0          4h55m
kube-system   kube-proxy-9gfqq                        1/1     Running   1          5h33m
kube-system   kube-proxy-kzlpw                        1/1     Running   0          5h33m
kube-system   kube-scheduler-k8s-master01             1/1     Running   1          5h34m
kube-system   kubernetes-dashboard-778ff9499c-ph44s   1/1     Running   0          5h21m

2.3 查看副本数
[root@k8s-master01 ~]# kubectl get deployments
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
nginx-demo   1/1     1            1           4h12m

[root@k8s-master01 ~]# kubectl get pod -o wide
NAME                          READY   STATUS    RESTARTS   AGE     IP           NODE     NOMINATED NODE   READINESS GATES
nginx-demo-85ff79dd56-svdbl   1/1     Running   0          4h13m   10.244.1.8   node01   
可以看到nginx和httpd的3个副本pod均匀分布在3个节点上

2.4 查看deployment详细信息
[root@k8s-master01 ~]# kubectl describe deployments


2.5 查看集群基本组件状态
[root@k8s-master01 ~]# kubectl get cs
NAME                 STATUS    MESSAGE             ERROR
scheduler            Healthy   ok                  
controller-manager   Healthy   ok                  
etcd-0               Healthy   {"health":"true"}   

2.6 测试
[root@k8s-master01 ~]# curl 192.168.56.3:30000       
Welcome to nginx!

Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to "http://nginx.org/">nginx.org.
Commercial support is available at
"http://nginx.com/">nginx.com.

Thank you for using nginx.

 浏览器访问如下:

技术图片

 

 报错总结:

1)、image.sh 脚本做一下补充

  1>、url 已经做了修改,按照文中的 url 我下载的时候下载不了,超时,所以我已经改为可以下载的 url 了

  2>、version 一定要改为自己的版本

2)、安装pod网络时 apply 的时候,那个文件一直超时,如果这样可以直接下载此文件即可

 

3)、如果 kubeadm init apply 的时候提示 xxx folder exist,执行如下的语句

  kubeadm reset 

4)、集群测试的时候 nginx.yaml 中如果apiVersion 写的是 extension/v1beta1 的话,会报错.改为如下的即可

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-demo
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-demo
spec:
  type: NodePort
  ports:
  - name: nginx
    nodePort: 30000
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx

centos 7 安装 kubernetes

标签:网络方案   stat   base   arch   资源   tag   文件中   protoc   this   

原文地址:https://www.cnblogs.com/zhuzi91/p/12357971.html


评论


亲,登录后才可以留言!