kubernetes官网

安装环境

不支持centos8的系统(现在已经支持了)

ip 服务 硬件要求
192.168.1.11(node1) Docker(已安装)、kubernetes 内存4G,双核CPU
192.168.1.12(node2) Docker(已安装)、kubernetes 内存4G,双核CPU
192.168.1.13(node3) Docker(已安装)、kubernetes 内存4G,双核CPU

安装步骤

环境准备

为了修改文件传输文件的方便,将主机名更改为安装环境所述的node,并写入hosts文件

ssh设置

node1

[root@localhost ~]# vim /etc/hosts
192.168.1.11 node1
192.168.1.12 node2
192.168.1.13 node3

ssh免密

方便传输文件

node1

[root@localhost ~]# ssh-keygen
[root@localhost ~]# ssh-copy-id -i root@node2
[root@localhost ~]# ssh-copy-id -i root@node3

传输hosts文件

[root@localhost ~]# scp /etc/hosts root@node2:/etc
[root@localhost ~]# scp /etc/hosts root@node3:/etc

更改主机名

node1

[root@localhost ~]# hostname node1
[root@localhost ~]# bash
[root@node1 ~]# 

node2

[root@localhost ~]# hostname node2
[root@localhost ~]# bash
[root@node2 ~]# 

node3

[root@localhost ~]# hostname node3
[root@localhost ~]# bash
[root@node3 ~]#

关闭防火墙沙盒

node1/2/3

systemctl stop firewalld
setenforce 0
vim /etc/selinux/config 
# 修改
SELINUX=disabled

kubernetes安装环境要求

官方文档

防火墙端口

如果不关闭防火墙,请放下以下端口

Master节点

协议 方向 端口范围 目的 使用者
TCP协议 入站 64430-64439 Kubernetes API server 所有
TCP协议 入站 2379-2380 etcd server client API kube-apiserver, etcd
TCP协议 入站 10250 Kubelet API Self, Control plane
TCP协议 入站 10251 kube-scheduler Self
TCP协议 入站 10252 kube-controller-manager Self

Node节点

协议 方向 端口范围 目的 使用者
TCP协议 入站 10250 Kubelet API Self, Control plane
TCP协议 入站 30000-32767 NodePort Services† 所有

验证每个节点的mac地址和product_uuid是唯一的

kubernetes通过这两个值来确定集群中的节点

node1

[root@node1 ~]# cat /sys/class/dmi/id/product_uuid
E2B74D56-23A9-4E8B-620C-555387355616

node2

[root@node2 ~]# cat /sys/class/dmi/id/product_uuid
371E4D56-E8D8-294C-DA42-D06C62FD9B62

node3

[root@node3 ~]# cat /sys/class/dmi/id/product_uuid
96E94D56-D4D8-18DC-FDAE-89060C320C7A

iptables桥接流量

因为增加内存的原因,需要关机,所以服务需要重启

systemctl start docker
systemctl enable docker

node1

关于iptables的两项配置依赖于docker,docker服务必须启动

[root@node1 ~]# vim /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness = 0   # 当内存oom时不使用交换分区

如果以上两条iptables的参数不生效,再执行modprobe ip_vs_rr
modprobe br_netfilter

在执行sysctl -p之前要确认docker服务已经启动了

[root@node1 ~]# sysctl -p
[root@node1 ~]# modprobe  ip_vs_rr
[root@node1 ~]# modprobe br_netfilter
[root@node1 ~]# scp /etc/sysctl.conf root@node2:/etc
[root@node1 ~]# scp /etc/sysctl.conf root@node3:/etc

node2

[root@node2 ~]# sysctl -p
[root@node2 ~]# modprobe  ip_vs_rr
[root@node2 ~]# modprobe br_netfilter

node3

[root@node3 ~]# sysctl -p
[root@node3 ~]# modprobe  ip_vs_rr
[root@node3 ~]# modprobe br_netfilter

关闭swap分区

三台操作同样,这一步不要scp,因为fstab不一样

swapoff -a
vim /etc/fstab 
# 将分区类型为swap的一行注释掉
/dev/mapper/centos-swap swap

查看是否关闭

[root@node1 ~]# free -m
           total        used        free      shared  buff/cache   available
Mem:        3770         793        2151          21         825        2732
Swap:          0           0           0

kubernetes安装

这里使用阿里云镜像站安装

kubernetes阿里云镜像站

node1

进入上面这个页面,使用centos的yum源

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

将yum源传给每台主机

[root@node1 ~]# scp /etc/yum.repos.d/kubernetes.repo root@node2:/etc/yum.repos.d/
[root@node1 ~]# scp /etc/yum.repos.d/kubernetes.repo root@node3:/etc/yum.repos.d/

node1/2/3

yum install -y kubelet kubeadm kubectl
  • kubeadm:引导集群的命令。
  • kubelet:在群集中所有计算机上运行的组件,它执行诸如启动Pod和容器之类的操作。
  • kubectl:用于与您的集群通信的命令行工具。

查看版本

[root@node1 ~]# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.1",
GitCommit:"7879fc12a63337efff607952a323df90cdc7a335", GitTreeState:"clean",
BuildDate:"2020-04-08T17:36:32Z", GoVersion:"go1.13.9", Compiler:"gc", 
Platform:"linux/amd64"}

安装kubernetes的tab快捷键

[root@node1 ~]# yum -y install bash-completion
[root@node1 ~]# source <(kubectl completion bash)
[root@node1 ~]# source <(kubeadm completion bash)
[root@node1 ~]# vim .bashrc
# 末尾添加
source <(kubeadm completion bash)
source <(kubectl completion bash)

三台启动服务

systemctl enable kubelet.service && systemctl start kubelet.service 

此时会启动失败,因为此时的配置还没初始化完成,所以此时不能启动kubelet,等后续kubeadm启动成功后再查看

kubernetes创建集群

node1

执行这条后会等待一段时间,需要进行下载镜像

[root@node1 ~]# kubeadm init --apiserver-advertise-address 192.168.1.11 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.18.1 --pod-network-cidr=10.244.0.0/16
# 参数释义
--apiserver-advertise-address:通告侦听地址
--image-repository:指定镜像地址使用阿里云的,默认会使用谷歌镜像
--kubernetes-version:指定当前的kubernetes的版本
--pod-network-cidr=10.244.0.0/16:flannel网络的固定地址范围

完成后会有以下输出信息

# 如果使用普通账号操作,执行以下三条 
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 部署集群网络
  https://kubernetes.io/docs/concepts/cluster-administration/addons/
# 其他kubernetes主机通过以下命令加入kubernetes集群
kubeadm join 192.168.1.11:6443 --token jmgcow.rbwqh31v4mu4au33 \
    --discovery-token-ca-cert-hash sha256:9f77bfd2748541ebacd21566de825073bfeb1c7a0515c0284f7308446d9d5f54

如果是root用户先执行以下命令

[root@node1 ~]# export KUBECONFIG=/etc/kubernetes/admin.conf
[root@node1 ~]# vim .bashrc
# 末尾添加
export KUBECONFIG=/etc/kubernetes/admin.conf

部署集群网络

浏览器打开改地址https://kubernetes.io/docs/concepts/cluster-administration/addons/

找到下图位置,点击flannel

kubernetes_flannel

进入Documentation目录下

kubernetes_flannel2

找到kube-flannel.yml文件

kubernetes_flannel3

找到该位置,此镜像需要使用docker下载

kubernetes_flannel4

[root@node1 ~]# docker pull quay.io/coreos/flannel:v0.12.0-arm64 
[root@node1 ~]# docker pull quay.io/coreos/flannel:v0.12.0-amd64

然后复制该页面的所有文件所有内容到以下文件

[root@node1 ~]# vim kube-flannel.yml

部署集群网络

[root@node1 ~]# kubectl apply -f kube-flannel.yml 

node2/3加入集群

kubeadm join 192.168.1.11:6443 --token jmgcow.rbwqh31v4mu4au33 \
    --discovery-token-ca-cert-hash sha256:9f77bfd2748541ebacd21566de825073bfeb1c7a0515c0284f7308446d9d5f54

完成后输出一下信息

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

node1

在node1运行kubectl get nodes查看集群节点,状态的为Notready的是还没有准备好,多等一会,再去查看

[root@node1 ~]# kubectl get nodes
NAME    STATUS     ROLES    AGE   VERSION
node1   Ready      master   31m   v1.18.1
node2   Ready      <none>   21m   v1.18.1
node3   Ready      <none>   21m   v1.18.1

重新查看集群状态

[root@node1 ~]# kubectl get nodes
NAME    STATUS   ROLES    AGE   VERSION
node1   Ready    master   34m   v1.18.1
node2   Ready    <none>   24m   v1.18.1
node3   Ready    <none>   24m   v1.18.1

执行kubectl get pod --all-namespaces,查看所有命名空间的pod,如果有状态为PodInitializing,就多等一会,网络原因,pod插件没有下载好,多等等就好了,全部这台为running即可

[root@node1 ~]# kubectl get pod --all-namespaces
NAMESPACE     NAME                            READY   STATUS            RESTARTS   AGE
kube-system   coredns-7ff77c879f-d67t7        1/1     Running           1          4m50s
kube-system   coredns-7ff77c879f-qxvdc        1/1     Running           1          4m50s
kube-system   etcd-node1                      1/1     Running           0          4m56s
kube-system   kube-apiserver-node1            1/1     Running           0          4m55s
kube-system   kube-controller-manager-node1   1/1     Running           0          4m51s
kube-system   kube-flannel-ds-amd64-4vqm6     1/1     Running           0          2m49s
kube-system   kube-flannel-ds-amd64-nv8mm     1/1     Running           0          2m21s
kube-system   kube-flannel-ds-amd64-v5w97     1/1     Running           0          2m26s
kube-system   kube-proxy-bfccm                1/1     Running           0          2m26s
kube-system   kube-proxy-jwr2f                1/1     Running           0          4m50s
kube-system   kube-proxy-mf4r9                1/1     Running           0          2m21s
kube-system   kube-scheduler-node1            1/1     Running           0          4m51s

集群搭建成功

评论




正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0