kubernetes
  • Introduction
  • 安装
    • 组件端口
    • 二进制安装
    • Kubeadm
      • 安装单Master集群
      • 安装高可用集群(手动分发证书)
      • 安装高可用集群(自动上传证书)
      • 安装ETCD集群
      • 安装高可用集群(外部ETCD)
    • 启动参数解析
      • ETCD相关参数
  • 负载均衡
    • Service
    • Ingress
    • 安装MetalLB
    • Nginx-ingress-controller
      • 转发TCP与UDP服务
      • 启动参数
      • 自定义Nginx模板
  • 存储
    • Volume
    • PV与PVC
    • StorageClass
    • Local-PV
      • Static-Provisioner
    • 实践
      • Ceph-RBD
      • NFS
  • 有状态服务
    • Mysql实践
    • Operator
      • Etcd
      • Zookeeper
      • Mysql
  • 认证与授权
    • 认证
      • 实践
    • 授权
  • Helm
    • 安装
    • Chart
      • 依赖
    • Helm命令
    • Repository
  • 日志
  • 监控
    • Prometheus体系
      • Prometheus
        • 内置函数
        • 配置
          • 规则文件
        • PromQL
      • Exporter
        • Metrics
      • Grafana
        • 配置
      • AlertManager
        • 配置
    • 容器监控
      • Cadvisor的指标
      • k8s中部署Prom与Cadvisor
  • Istio
  • 资源预留
    • imagefs与nodefs
    • 总结
  • 集群联邦
    • 联邦DNS原理
    • 联邦DNS安装
    • 安装federation-v1
  • Other
    • ImagePullSecret
    • QOS
    • Apiserver的代理
    • 资源配额
Powered by GitBook
On this page
  • 一、前置条件(所有节点)
  • 二、配置(所有节点)
  • 2.1 yum源
  • 2.2 加载br_netfilter模块
  • 2.3 关闭selinux
  • 2.4 关闭firewalld
  • 2.5 iptables
  • 三、安装kubelet、kubectl、kubeadm(所有节点)
  • 四、安装Master(master节点)
  • 4.1 初始化master
  • 4.2 使用kubectl
  • 4.3 安装网络插件
  • 4.4 验证master节点
  • 五、安装Node(node节点)
  • 六、去掉Master的污点
  • FAQ

Was this helpful?

安装

使用kubeadm安装指定版本的kubernetes(安装1.14.0,最新版本为1.14.1),本教程使用root用户安装

一、前置条件(所有节点)

  • 已安装好docker

  • swap已关闭

  • centos7.2或以上

  • 至少2C2G

二、配置(所有节点)

2.1 yum源

在/etc/repos.d/目录下创建文件kubernetes.repo,内容如下

[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0

2.2 加载br_netfilter模块

执行以下命令查看br_netfilter模块是否已加载

$ lsmod | grep br_netfilter

如果没有,则手动加载

$ modprobe br_netfilter

备注:实践中发现,即使手动加载该模块后lsmod | grep br_netfilter的输出还是为空,没关系,直接忽略

2.3 关闭selinux

$ setenforce 0
$ sed -i 's#SELINUX=enforcing#SELINUX=permissive#g' /etc/selinux/config

2.4 关闭firewalld

$ systemctl stop firewalld && systemctl disable firewalld

2.5 iptables

创建文件/etc/sysctl.d/k8s.conf,内容如下

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

然后执行命令使其生效

$ sysctl --system

三、安装kubelet、kubectl、kubeadm(所有节点)

查看kubernetes的版本信息,可以看到当前最新版本为v1.14.1

$ yum list kubelet --showduplicates | sort -r
...
kubelet.x86_64                       1.14.1-0                        kubernetes 
kubelet.x86_64                       1.14.0-0                        kubernetes
...

这里我们安装1.14.0,执行以下命令安装kubelet、kubectl、kubeadm

$ yum -y install kubelet-1.14.0 kubectl-1.14.0 kubeadm-1.14.0

然后启动kubelet

$ systemctl daemon-reload
$ systemctl enable kubelet
$ systemctl restart kubelet

注意:此时如果用命令systemctl status kubelet查看kubelet的状态,并不是active,没有关系

四、安装Master(master节点)

4.1 初始化master

首先执行以下命令下载所需镜像,如果成功的话会有如下输出,下载了如下的七个镜像:

$ kubeadm config images pull --kubernetes-version=1.14.0
[config/images] Pulled k8s.gcr.io/kube-apiserver:v1.14.0
[config/images] Pulled k8s.gcr.io/kube-controller-manager:v1.14.0
[config/images] Pulled k8s.gcr.io/kube-scheduler:v1.14.0
[config/images] Pulled k8s.gcr.io/kube-proxy:v1.14.0
[config/images] Pulled k8s.gcr.io/pause:3.1
[config/images] Pulled k8s.gcr.io/etcd:3.3.10
[config/images] Pulled k8s.gcr.io/coredns:1.3.1

然后执行以下命令初始化master,该命令会有很多输出,安装失败的话可以从输出中找到错误信息。如果安装成功,则会在最后打印出类似如下的信息:

$ kubeadm init --pod-network-cidr=172.26.0.0/16 --kubernetes-version=1.14.0
...
Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.1.101:6443 --token 5pjzvm.7wc1p9at38nsqsd5 \
    --discovery-token-ca-cert-hash sha256:eb0dbfb61972b8f8a3b80a3392fae30cd2024148f87aa71ff03ac94443edacf

4.2 使用kubectl

如果非root用户想使用kubectl工具,执行以下命令

$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

如果是root用户想使用kubectl工具,执行以下命令(本教程使用root用户)

export KUBECONFIG=/etc/kubernetes/admin.conf

4.3 安装网络插件

这里我们使用网络插件calico,执行以下命令安装

$ kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml
$ kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml

如果提示说文件下载不下来,你可以手动把rbac-kdd.yaml与calico.yaml这两个文件先下载下来,然后再执行命令

$ kubectl apply -f rbac-kdd.yaml
$ kubectl apply -f calico.yaml

4.4 验证master节点

在master上执行以下命令,查看master节点的状态,应当为Ready

$ kubectl get node
NAME     STATUS   ROLES    AGE   VERSION
peng01   Ready    master   4m   v1.14.0

五、安装Node(node节点)

在master上执行以下命令,获取bootstrap token,输出如下:

$ kubeadm token list
TOKEN                     TTL       EXPIRES                     USAGES                   DESCRIPTION                                                EXTRA GROUPS
5pjzvm.7wc1p9at38nsqsd5   23h       2019-04-02T21:28:07-04:00   authentication,signing   The default bootstrap token generated by 'kubeadm init'.   system:bootstrappers:kubeadm:default-node-token

bootstrap token的过期时间一般为24小时,如果没有可用的token,则执行以下的命令创建一个

$ kubeadm token create

在master上执行以下命令获取--discovery-token-ca-cert-hash,输出如下

$ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
eb0dbfb61972b8f8a3b80a3392fae30cd2024148f87aa71ff03ac94443edacf

然后,在node节点上执行以下命令,将节点加入到集群中(注意:在执行此命令前,也需要先在node节点上安装好docker、kubelet、kubeadm)

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

最后,我们验证一下node节点是否成功加入到集群:在master上执行以下命令,应当看到node为Ready状态

$ kubectl get node
NAME     STATUS   ROLES    AGE   VERSION
peng01   Ready    master   10m   v1.14.0
peng02   Ready    <none>   6m    v1.14.0

六、去掉Master的污点

默认情况下,master节点上有一个污点,如下:

spec:
  podCIDR: 172.26.0.0/24
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master

我们需要去掉这个污点,使用Pod能正常调度到master节点上。执行以下命令:

$ kubectl patch node peng01 -p '{"spec":{"taints":[]}}'

FAQ

Q: 节点长时间为NotReady状态?

A:执行命令kubectl get pod -o wide -n kube-system | grep calico-node查看节点上的calico-node是否为Running状态,如果一直是ContainerCreating状态,有可能是calico的镜像一直下载不下来。在节点上执行命令检查calico的镜像是否成功下载下来:

$ docker images | grep calico
calico/node                          v3.3.6              ce902e610f51        5 days ago          75.3MB
calico/cni                           v3.3.6              b8eeeae14aa4        5 days ago          75.4MB
PreviousIntroductionNext组件端口

Last updated 5 years ago

Was this helpful?