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
- 安装docker
- 安装kubelet、kubeadm、kubectrl 以1.10.8为例:
yum install kubelet-1.10.8 kubeadm-1.10.8 kubectl-1.10.8-0
- 设置开机启动kubelet(有些版本需要提前启动kubelet,systemctl start kubelet;有些版本不需要,会在kubeadm安装时启动)
systemctl enable kubelet
- 启动docker(如果已启动则无视)
systemctl enable docker && systemctl start docker
- 通过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为例。
- 安装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获取失败)
- 添加node到集群中
kubeadm join --token 242b80.86d585ebd6358b08 192.168.18.4:6443
遇到的问题
- k8s各组件kubelet、kubeadm的版本要保持一致,比如kubeadm 1.11,kubelet 1.12就会安装失败
- 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
- 在kubeadm init安装失败时,要先进行kubeadm reset清除环境再重新进行kubeadm init安装
- kubelet的日志在/var/log/message中,遇到问题可查看日志。
- 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
- 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表示日志级别
浙公网安备 33010602011771号