实验环境准备

主机名192.168.210.85 ---master

     192.168.210.177---node-1

     192.168.210.176 ---node-2

 

三台服务器的初始环境配置

关闭防火墙:

$ systemctl stop firewalld

$ systemctl disable firewalld

 

关闭selinux:

$ sed -i 's/enforcing/disabled/' /etc/selinux/config

$ setenforce 0

 

关闭swap:

$ swapoff -a  $ 临时

$ vim /etc/fstab  $ 永久

 

添加主机名与IP对应关系(记得设置主机名):

设置主机名:

vi /etc/sysconfig/network

HOSTNAME=k8s-master

$ cat /etc/hosts

192.168.210.85 master

192.168.210.177 node-1

192.168.210.176 node-2

 

将桥接的IPv4流量传递到iptables的链:

$ cat > /etc/sysctl.d/k8s.conf << EOF

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

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

EOF

$ sysctl --system

 

1.设置使用国内Yum源

 

[root @ master]#cd /etc/yum.repos.d/

 

[root @ master yum.repos.d]#wget \

 

 https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

 

2. 安装指定的Docker版本

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

$ yum -y install docker-ce-18.06.1.ce-3.el7

[root @ master]#yum -y install docker-ce-18.06.1.ce-3.el7

3. 启动进程

[root @ master]# systemctl enable docker && systemctl start docker

[root @ master]#docker --version

4. 添加阿里云YUM软件源

$ 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=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

EOF

5. 安装

[root @ master]#yum install -y kubelet-1.19.3 kubeadm-1.19.3 kubectl-1.19.3 ipvsadm

6. 配置kubelet

默认情况下, Kubelet临时位于主机的交换分区,后续规划的时候,可以考虑在系统安装的时候不创建交换分区,针对已经存在的交换分区的可以设置忽略禁止使用交换的限制,不然无法启动Kubelet 。

 

[root@master]#vim / etc / sysconfig / kubelet

KUBELET_EXTRA_ARGS =“-fail-swap-on = false”

7. 设置内核参数

[root@master]#cat > EOF<< /etc/sysctl.d/k8s.conf

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

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

net.ipv4.ip_forward = 1

EOF

紧急行动

使配置生效

[root@master]#sysctl --system

8. 启动kubelet并设置启动

此时kubelet是无法正常启动的,可以查看/ var / log / messages有报错信息

[root@master]systemctl enable kubelet && systemctl start kubelet

 

以上操作请在三台服务器均要操作

master 主机操作

初始化部署部署Master

[root@master]kubeadm init \

  --apiserver-advertise-address = 192.168.210.85 \

  --image-repository Registry.aliyuncs.com/google_containers \

  --kubernetes-version v1.19.3 \

   --service-cidr = 10.1.0.0/16 \

  --pod-network-cidr = 10.2.0.0/16

k8s安装实战总结_java

k8s安装实战总结_java_02

k8s安装实战总结_java_03

 --kubernetes-version = v1.19.3 :指定要安装的版本号。

--ignore-preflight-errors = :忽略运行时的错误,例如上面存在的[ERROR NumCPU ][ERROR Swap ] ,忽略这两个报错就是增加--ignore-preflight-errors = NumCPU --ignore- preflight-errors =交换的配置即可。

再次执行初始化操作:

 

[root@master]kubeadm init \

  --apiserver-advertise-address = 192.168.210.85 \

  --image-repository Registry.aliyuncs.com/google_containers \

  --kubernetes-version v1.19.3 \

  --service-cidr = 10.1.0.0 / 16 \

  --pod-network-cidr = 10.2.0.0 /16 \

  --ignore-preflight-errors =交换

  --ignore-preflight-errors =数字CPU

 

运行前检查

       [WARNINGNumCPU]:可用CPU的数量少于所需的2

       [WARNINGSwap]:不支持通过交换运行。请禁用

 

拉出设置Kubernetes集群所需的图像

这可能需要一两分钟,具体取决于您的互联网连接速度

您还可以事先使用'kubeadm config images pull'执行此操作

 

执行完毕后,会在当前输出下停留,等待下载Kubernetes组件的泊坞镜像。根据你的网络情况,可以持续1-5分钟,你也可以使用搬运工图像查看下载的镜像。镜像下载完毕之后,就会进行初始操作:

 

[kubelet-start]将带有标志的kubelet环境文件写入文件“ /var/lib/kubelet/kubeadm-flags.env”

[kubelet-start]kubelet配置写入文件“ /var/lib/kubelet/config.yaml”

[kubelet-start]激活kubelet服务

[证书]使用certificateDir文件夹“ / etc / kubernetes / pki”

[certs]生成“ ca”证书和密钥

[证书]生成“ apiserver”证书和密钥

 

kubeadm init到底干了什么?

[init] :指定版本进行初始化操作

[preflight] :初始化前的检查和下载所需要的Docker附件文件

[kubelet-start] :生成kubelet的配置文件“ /var/lib/kubelet/config.yaml ”,没有这个文件kubelet无法启动,因此初始化之前的kubelet实际上启动失败。

[certificates] :生成Kubernetes使用的证书,放在/ etc / kubernetes / pki目录中。

[kubeconfig] :生成KubeConfig文件,存放在/ etc / kubernetes目录中,组件之间通信需要使用对应文件。

[控制面板:使用/ etc / kubernetes / manifest目录下的YAML文件,安装Master组件。

[etcd] :使用/etc/kubernetes/manifest/etcd.yaml安装Etcd服务。

[wait-control-plane] :等待控制计划部署的主组件启动。

[apiclient] :检查主组件服务状态。

[uploadconfig] :更新配置

[kubelet] :使用configMap配置kubelet 

[patchnode] :更新CNI信息到Node上,通过注释的方式记录。

 

[mark-control-plane] :为当前上游打标签,打了角色Master ,和不可调度标签,这样有时就不会使用Master例程来运行Pod 

[bootstrap-token] :生成令牌记录下来,后边使用kubeadm join往累积中添加例程时会用到

[附加组件:安装附加组件CoreDNSkube-proxy

成功执行之后,你会看到下面的输出:

您的Kubernetes主机已成功初始化!

 

要开始使用群集,您需要以普通用户身份运行以下程序:

  mkdir -p $ HOME / .kube

  cp -i / etc / kubernetes / admin.conf $ HOME / .kube / config

  chown $ {id -u):$ {id -g$ HOME / .kube / config

 

现在,您应该将Pod网络部署到群集。

 

使用列出的选项之一运行“ kubectl apply -f [podnetwork] .yaml”

 https://kubernetes.io/docs/concepts/cluster-administration/addons/

现在,您可以通过在每个节点上运行以下命令来加入任意数量的计算机

这是初始化成功的提示操作:

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.210.85:6443 --token cyknsy.ffaip3gcyvclacb0 \

    --discovery-token-ca-cert-hash sha256:d804891db7ce3467bb83e5f62f80a50091dfac6c7e740edd8dc7e2f8b2e811d2

 

 

 

按照上面的截图提示操作:为kubectl准备kubeconfig文件

[root@master ~]#   mkdir -p $HOME/.kube

[root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

cp:是否覆盖"/root/.kube/config"y

[root@master ~]# chown $(id -u):$(id -g) $HOME/.kube/config

[root@master ~]# kubectl apply -f [podnetwork].yaml:https://kubernetes.io/docs/concepts/cluster-administration/addons/

error: the path "[podnetwork].yaml:https://kubernetes.io/docs/concepts/cluster-administration/addons/" does not exist

[root@master ~]# mkdir -p $ HOME / .kube

[root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME /.kube/config

cp: 目标"/.kube/config" 不是目录

[root@master ~]# cp -i /etc/kubernetes/admin.conf $H

$HISTCMD       $HISTCONTROL   $HISTFILE      $HISTFILESIZE  $HISTSIZE      $HOME          $HOSTNAME      $HOSTTYPE      

[root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/c

cache   config  

[root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

cp:是否覆盖"/root/.kube/config"y

[root@master ~]# chown $(id -u):$(id -g) $HOME/.kube/config

[root@master ~]#

 

下面附截图:

k8s安装实战总结_java_04node-1和node-2加入到master

k8s安装实战总结_java_05

k8s安装实战总结_java_06

[root@node-1 ~]# systemctl restart kubelet

[root@node-2 ~]# systemctl restart kubelet

[root@node-2 ~]# kubectl get node

NAME     STATUS     ROLES    AGE     VERSION

master   Ready      master   5d9h    v1.19.3

node-1   Ready      <none>   5h2m    v1.19.3

node-2   Ready      <none>   5h17m   v1.19.3

k8s安装实战总结_java_07

有好多坑,大家记得查看日志报错哦!!