kubernetes 服务安装部署

准备工作:

添加k8s源
在/etc/yum.repos.d/目录中新建k8s.repo文件,其中输入:

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

保存文件后输入

yum clean all
yum makecache

关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

关闭swap

swapoff -a

把/etc/fstab文件中带有swap的行删除,没有则无视

安装k8s:

安装docker、kubelet、kubeadm、kubectrl

  1. 安装docker
  2. 安装kubelet、kubeadm、kubectrl 以1.10.8为例:
yum install kubelet-1.10.8 kubeadm-1.10.8 kubectl-1.10.8-0
  1. 设置开机启动kubelet(有些版本需要提前启动kubelet,systemctl start kubelet;有些版本不需要,会在kubeadm安装时启动)
systemctl enable kubelet
  1. 启动docker(如果已启动则无视)
systemctl enable docker && systemctl start docker
  1. 通过kubeadm安装
kubeadm init --kubernetes-version=1.10.8 --pod-network-cidr 192.100.0.0/16

kubeadm在安装时会去官网查询各组件对应的版本号,所以在被墙的情况下需要制定版本号,在安装过程中会下载一些镜像,需要提前设置docker代理
pod-network-cidr 192.100.0.0/16 指定pod的网址区段,需要和后面网络组件(比如calico)中设置保持一致。安装成功后会看到以下信息:

To start using your cluster, you need to run (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:
http://kubernetes.io/docs/admin/addons/
You can now join any number of machines by running the following on each node as root:
kubeadm join --token 242b80.86d585ebd6358b08 192.168.18.4:6443 (192.168.18.4:6443为master地址)

按以上提示继续操作,默认设置pod不能调度到master节点上,如果想要调度到master(比如单节点集群)上,需要输入以下命令:

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

此时通过kubectl get nodes命令可以看到节点处于NotReady状态,还需要安装网络组件,这里以calico为例。

  1. 安装calico组件
  • 下载安装calico-etcd:
wget https://docs.projectcalico.org/v3.2/getting-started/kubernetes/installation/hosted/etcd.yaml
kubectl create -f etcd.yaml
  • 下载安装calico RBAC
wget https://docs.projectcalico.org/v3.2/getting-started/kubernetes/installation/rbac.yaml
kubectl create -f rbac.yaml
  • 下载安装calico:
wget https://docs.projectcalico.org/v3.2/getting-started/kubernetes/installation/hosted/calico.yaml
  • 打开calico.yaml,修改CALICO_IPV4POOL_CIDR对应的value,与kubeadm init中设置的pod-network-cidr保持一致
watch kubectl get pods --all-namespaces

等待所有pod状态变为running,即表示安装成功。如果有error,可用kubectl describe pod xxx查看状态异常的pod,查看event部分的错误原因。(比较常见的就是image获取失败)

  1. 添加node到集群中
kubeadm join --token 242b80.86d585ebd6358b08 192.168.18.4:6443

遇到的问题

  1. k8s各组件kubelet、kubeadm的版本要保持一致,比如kubeadm 1.11,kubelet 1.12就会安装失败

  1. kubeadm安装时报以下错误:
    [preflight] Some fatal errors occurred: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1

解决方案

echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables && echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables

  1. 在kubeadm init安装失败时,要先进行kubeadm reset清除环境再重新进行kubeadm init安装

  1. kubelet的日志在/var/log/message中,遇到问题可查看日志。

  1. kubeadm安装失败,查看/var/log/message,发现kubelet启动失败,报错failed to create kubelet: misconfiguration: kubelet cgroup driver: "systemd" is different from docker cgroup driver: "cgroupfs",这是因为kubelet的文件驱动和docker不一致造成的,修改kubelet配置文件:
vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

修改文件中的--cgroup-driver=cgroupfs(保持和docker一致)

systemctl stop kubelet
kubeadm reset
kubeadm init --kubernetes-version=1.10.8 --pod-network-cidr 192.100.0.0/16

  1. kubelet本身服务的日志默认放在/var/log/messages中,有时需要修改日志位置,可通过修改kubelet启动命令行参数来实现。
vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

添加日志相关的命令行参数

ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_CADVISOR_ARGS $KUBELET_CGROUP_ARGS $KUBELET_CERTIFICATE_ARGS $KUBELET_EXTRA_ARGS --log-dir=/data/k8s/logs/kubelet --logtostderr=false --v=4

--log-dir为日志目录位置,--logtostderr表示是否将错误信息输出到stderr,默认true,改为false表明输出到文件,--v表示日志级别

posted @   程序员多多  阅读(49)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
点击右上角即可分享
微信分享提示