centos 8 使用 kubeadm 安装 kubernetes 1.8.2 最新完整教程

作者:青山常在人不老   阅读 (2462)  |  收藏 (0)  |  点赞 (0)

摘要

本文讲述了如何在centos 8系统上,使用 kubeadm 安装 kubernetes 1.8.2 的方法,文章为作者一步一步实践后写的,综合了很多的文章,解决了很多安装中的问题。


原文链接:centos 8 使用 kubeadm 安装 kubernetes 1.8.2 最新完整教程

安装前说明

    作者在安装kubernetes的过程中历尽艰辛,综合了官方文档和网上各种资料,踏过了安装中的各种坑,终于在不断尝试的过程中总结出了安装过程中的尽可能多可能出现的错误,并在本教程中一一解决问题。

目标:

    在centos 8 机器上通过kubeadm安装kubernetes 1.8.2

使用机器:

    centos 8 (本地虚拟机和华为云均测试通过),一台

安装说明

    如果您只有一台centos8 机器,可以安装单机版kubeadm,单机版和集群版的最大区别在于work节点是否和master节点在同一台机子上

    不管是否使用单机版还是集群版,他们都有同一个kubernetes安装流程,区别在于集群初始化以后。本文最后会讲解如何做单机版和集群版

    您完全可以按照本文进行完整的安装过程

开始安装

基本配置

设置主机名

hostnamectl set-hostname guopf-master     #guopf-master为你想要设置的主机名,你可以修改

编辑hosts文件

vi /etc/hosts

在最后追加以下内容

192.168.75.128 guopf-master

注意,上面的Ip为你的实际ip,如果为公网ip,就配置公网ip,如为本地虚拟机中的ip,请配置局域网ip,后面的主机名为上面自己修改的主机名

重启机器
reboot
关闭系统防火墙
systemctl stop firewalld
systemctl disable firewalld
关闭SElinux
setenforce 0
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
sed -i "s/^SELINUX=permissive/SELINUX=disabled/g" /etc/sysconfig/selinux
sed -i "s/^SELINUX=permissive/SELINUX=disabled/g" /etc/selinux/config
关闭swap
# 关闭Swap,机器重启后不生效
swapoff -a

# 修改/etc/fstab永久关闭Swap
cp -p /etc/fstab /etc/fstab.bak$(date '+%Y%m%d%H%M%S')
# Redhat
sed -i "s/\/dev\/mapper\/rhel-swap/\#\/dev\/mapper\/rhel-swap/g" /etc/fstab
# CentOS
sed -i "s/\/dev\/mapper\/centos-swap/\#\/dev\/mapper\/centos-swap/g" /etc/fstab
# 修改后重新挂载全部挂载点
mount -a

# 查看Swap
free -m
cat /proc/swaps
配置系统内核参数使流过网桥的流量也进入iptables/netfilter框架中

编辑/etc/sysctl.conf

vi /etc/sysctl.conf

添加以下配置

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

安装docker-ce(19.03.11)

配置aliyun源

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache
rpm --import https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

卸载最新docker安装依赖的版本过低的应用

目前最新的docker-ce 依赖的podman版本很高,需要先卸载掉旧的podman,否则安装docker会报如下错误

docker 安装缺少 containerd.io 依赖


首先查看旧的podman版本

 rpm -q podman

返回如下

podman-1.4.2-5.module_el8.1.0+237+63e26edc.x86_64

卸载podman

dnf remove podman

安装docker依赖containerd.io

最新的docker依赖 >= 1.2.2-3 以上的containerd.io,需要首先安装containerd.io,否则会报如下错误:

docker 安装缺少 containerd.io 依赖

安装containerd

yum -y install https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

安装最新版docker-ce

yum -y install docker-ce

安装kubectl、kubelet、kubeadm

添加阿里kubernetes源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
EOF

清理yum缓存,重新构建缓存

yum -y install epel-release
yum clean all
yum makecache

安装kubelet 1.18.2 、kubectl 1.18.2、kubeadm 1.18.2

yum -y install kubectl-1.18.2 kubelet-1.18.2 kubeadm-1.18.2

启动Docker与kubelet服务,并设置开机自启动(如果在此步报错,说docker服务不存在,请检查上面docker安装是否报错了)

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

初始化kubeadm

此过程很慢,除非报错,否则一直等着就好了

kubeadm init --kubernetes-version=v1.18.2 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.75.128 --image-repository registry.aliyuncs.com/google_containers

注意

    1、初始化kubeadm有两种方式,一种为本文使用的方式,另一种为使用init模板,作者在使用模板初始化的过程中一直报错,无法解决,因此采用了此种方式;此步极为重要,只有初始化成功才表示kubernetes真正安装成功,而作者在此步经历了难以想象的坑(各种报错,在尝试了各种解决办法后才有了这篇文章) 。按照本文操作,正常不会出现问题,如果非要说出现了问题,那么请您及时在下面评论里面贴出报错信息,方便我补充。

    2、补充错误:华为云centos 8执行上述初始化语句会报错,报错信息不再贴出,下面直接给解决方案

    重置kubeadm(输入y确定重置)

kubeadm reset

    使用如下命令进行初始化

kubeadm init --kubernetes-version=v1.18.2 --image-repository registry.aliyuncs.com/google_containers

初始化后的操作

上面初始化成功,会返回如下内容:

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.75.128:6443 --token 9uoynw.irxa4lb853g5t42x \
    --discovery-token-ca-cert-hash sha256:f425204fb232a172ae166eae7f0e9d63d054b728aab44866fd94d5e43c3a7795

根据上面返回的内容,我们需要执行以下命令

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

注意,上面还有一个命令,目前我们不需要执行,后面如果你要加入work节点,在执行;如果您只是做单机版kubernetes,则可忽略此命令,此命令如下

kubeadm join 192.168.75.128:6443 --token 9uoynw.irxa4lb853g5t42x \
    --discovery-token-ca-cert-hash sha256:f425204fb232a172ae166eae7f0e9d63d054b728aab44866fd94d5e43c3a7795

部署flannel网络(如果不安装,node节点会无法工作)

切换到您用户所在的根目录下

cd ~

下载kube-flannel.yml

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml  -O kube-flannel.yml

wget https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml -O kube-flannel.yml

注意,如果你无法访问上述的网址,不能通过以上命令下载kube-flannel.yml文件(通常在国内的主机/服务器会出现此问题),请参考 kubernetes 安装flannel 所需的kube-flannel.yml文件国内下载   下载此文件

安装kube-flannel网络插件

kubectl apply -f kube-flannel.yml

至此kubernetes 安装完毕

kubernetes集群版

如您有其他的work节点想加入此kubernetes集群,请参照上面的命令加入

kubeadm join 192.168.75.128:6443 --token 9uoynw.irxa4lb853g5t42x \
    --discovery-token-ca-cert-hash sha256:f425204fb232a172ae166eae7f0e9d63d054b728aab44866fd94d5e43c3a7795

kubernetes (k8s)单机版

如果您想安装的是单机版kubernetes ,默认 Master Node不参与工作负载,所以 要配置让Master工作,请安如下2步操作

kubectl describe node guopf-master | grep Taints
或
kubectl describe node -A | grep Taints

返回以下内容(注意,部分机器此命令运行此命令会报错,大家可以忽略此步,直接进行下一步)

Taints:             node-role.kubernetes.io/master:NoSchedule

去掉 taint , 这样 单机 k8s 就能部署各种应用了

kubectl taint nodes --all node-role.kubernetes.io/master-
或
kubectl taint nodes guopf-master node-role.kubernetes.io/master-

至此,单机版kubernetes(k8s)就安装完成

其他

更换docker镜像仓库

将docker的源改为国内阿里云的源,下载docker镜像更快

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://1ui7q4j1.mirror.aliyuncs.com"]
}
EOF

更换镜像仓库后需要重启机器

reboot

安装dashboard

使用docker下载dashboard镜像

最新版dashboard版本为2.0.1,参见官方文档https://github.com/kubernetes/dashboard/releases 

docker pull kubernetesui/dashboard:v2.0.1

注意,假如未来的你看到这篇文章,可以通过以下命令查看可拉取的dashboard版本

docker search dashboard

下载安装dashboard使用的yaml文件

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.1/aio/deploy/recommended.yaml

注意,如果你访问不了上面的链接,请使用我下载好的文件 recommended.yaml文件下载;如果你自己下载的yaml文件,请注意修改此文件中引用的hashboard景象的名字,并改成如下内容:

image: kubernetesui/dashboard:v2.0.1

如果您使用的是我下载的yaml文件,那么不需要做任何修改(我已经修改好了,哈哈哈)

还需要注意的是,在我下载的yaml文件中,我还做了如下修改:

spec:
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30443
  selector:
    k8s-app: kubernetes-dashboard
  type: NodePort

也就是说,我将hashboard服务暴露给了外部,允许外部通过30443端口进行访问(type:NodePord,此步不懂得可以查下这个类型代表的意思)

安装dashboard

将上述yaml文件上传到你的linux服务器中,在命令窗口上cd到你的这个文件所在的目录

kubectl create -f recommended.yaml

此时,dashboard就能成功安装,安装后,您可以通过以下url进行访问dashboard

    #之所以是30443,是因为我上面的yaml文件改成了30443

首次访问需要输入token,我们可以通过以下方式创建admin用户,并获取该用户的token

首先,创建admin-user.yaml,并将下方内容复制到此文件,并使用kubectl执行该文件

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system

此时,回在kube-system下创建admin用户

其次,创建admin-user-role-binding.yaml,并将下方内容复制到此文件,并使用kubectl执行该文件

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kube-system

此时,会将admin成为被k8s授权操作api的用户

下方的命令查看token

查看kube-system命名空间下的token

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

注意,kube-system指的是上面yaml文件中设置的命名空间名称,最好不要修改了此yaml中的命名空间名称

该命令会返回如下内容:

kubernetes-dashboard 获取登录的token

上面截图中箭头指向的就是token,将此token复制到登录页面的token框中即可登录

登录成功后的页面如下:

image.png


下一篇文章将会讲解 如何使用kubernetes+docker部署 tomcat和mysql应用



分类   应用工具
字数   7637

博客标签    kubernetes 最新安装教程   k8s 1.8.2安装最新   centos 安装 k8s 1.8.2  

评论