摘要
本文讲述了如何在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
配置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会报如下错误
首先查看旧的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,否则会报如下错误:
安装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
添加阿里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 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 安装完毕
如您有其他的work节点想加入此kubernetes集群,请参照上面的命令加入
kubeadm join 192.168.75.128:6443 --token 9uoynw.irxa4lb853g5t42x \ --discovery-token-ca-cert-hash sha256:f425204fb232a172ae166eae7f0e9d63d054b728aab44866fd94d5e43c3a7795
如果您想安装的是单机版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镜像更快
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://1ui7q4j1.mirror.aliyuncs.com"] } EOF
更换镜像仓库后需要重启机器
reboot
使用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,此步不懂得可以查下这个类型代表的意思)
将上述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中的命名空间名称
该命令会返回如下内容:
上面截图中箭头指向的就是token,将此token复制到登录页面的token框中即可登录
登录成功后的页面如下:
下一篇文章将会讲解 如何使用kubernetes+docker部署 tomcat和mysql应用