Kubernetes安装
前提:安装Docker、关闭SWAP分区、关闭防火墙、禁用禁用SELinux、CPU至少2核、自行查找文章科普Docker对应的Kubernetes版本
一、准备工作
a.配置国内kubernetes仓库源
$ vim /etc/yum.repos.d/kubernetes.repo ---添加以下配置 [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
b.修改 Docker cgroup 驱动,与Kubernetes一致,使用 systemd
$ vim /etc/docker/daemon.json ---添加以下配置,注意.json格式不要盲目Copy { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ] } $ systemctl daemon-reload ---重新加载 daemon.json 文件 $ systemctl restart docker ---重启Docker使配置生效
c.修改 hosts
$ vim /etc/hostname ---将主机名加进去 $ vim /etc/hosts ---将主机IP和主机名加进去 # 另外还要加一条应用Flannel网络的地址到 hosts 里 # 199.232.68.133 raw.githubusercontent.com # 示例 [root@master ~]$ cat /etc/hostname master [root@master ~]$ cat /etc/hosts 192.168.1.2 master 199.232.68.133 raw.githubusercontent.com $ reboot ---重启机器使上面 修改 hosts 生效
二、安装
# 安装Kubelet、Kubeadm、Kubectl,一定一定要注意版本!!! $ yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes # 启动Kubelet和设置为开机自启 $ systemctl enable kubelet && systemctl start kubelet
三、设置路由(Centos 7需要)
$ vim /etc/sysctl.d/k8s.conf ---创建k8s.conf⽂件,添加以下配置 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 $ yum install -y bridge-utils ---安装 bridge-utils $ modprobe br_netfilter ---加载br_netfilter模块,使用lsmod查看开启的模块 $ sysctl -p /etc/sysctl.d/k8s.conf ---重新加载 k8s.conf 配置文件 或 $ sysctl --system ---重新加载所有配置文件
四、拉取镜像
# 列出所需镜像,需要自行上 hub.docker.com 上找对应的镜像拉取 # 尽量不要和列出的镜像版本差距太大 # Master端: $ kubeadm config images list ---列出所需镜像,打标签时一定要对齐该命令给的版本 # 如果你的网络足够好 $ kubeadm config images pull ---拉取集群所需镜像,这个需要FQ # 拉取镜像后需要对镜像重新打标签,注意对齐版本 $ docker tag [原镜像名:原镜像版本] [k8s.gcr.io/镜像名:原镜像版本] # 示例 $ docker tag xxx/kube-apiserver:v1.14.1 k8s.gcr.io/kube-apiserver:v1.14.1 # Node端需要的镜像:kube-proxy、pause # 删除原有镜像(可选)
五、初始化
# 初始化Master此处会各种报错,自行翻译解决 $ kubeadm init --apiserver-advertise-address 192.168.1.2 --pod-network-cidr 10.244.0.0/16 --kubernetes-version 1.2.3 # --apiserver-advertise-address 指定与其它节点通信的接口 # --pod-network-cidr 指定Pod网络子网,使用Fannel网络必须使用这个CIDR # --kubernetes-version 指定Kubernetes版本 # 安装完后备份输出的 kubeadm join 两行命令,需要它来给集群添加节点
六、按照提示执行命令
# 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 # 上面的命令不用改,Copy执行 # You should now deploy a pod network to the cluster # 找个目录执行,下载的文件用下面的命令执行 # 如果提示连接不上,请看本文准备工作的修改hosts 部分,检查 hosts 地址 $ wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml # 找到169和183行的镜像地址,改为你能拉取成功的镜像地址 $ vim ./kube-flannel.yml ---本文使用的是"easzlab/flannel:v0.13.0-amd64"镜像 $ kubectl apply -f [上面下载的 kube-flannel.yml 文件] ---应用Flannel网络 $ kubectl get pods --all-namespaces ---使kube-flannel处于Running状态 $ cat ~/.kube/config ---Kubelet默认配置文件,包含Master节点IP
七、节点NotReady
# 集群必须安装Pod网络插件,Pod才能相互通信 # 只需在Master节点操作,新加入的节点会自动创建相关Pod # 须在任何应用程序之前部署网络组件,在安装网络前,CoreDNS将不会启动 # 查看 CoreDNS 的状态是否 Running 状态 $ kubectl get pods --all-namespaces|grep coredns # kubeadm 支持多种网络插件,这里选择 Calico 网络插件 # 找个目录下载 calico.yaml $ wget https://docs.projectcalico.org/v3.8/manifests/calico.yaml $ vim calico.yaml ---修改 calico.yaml 配置文件 # 找到 625 行的 192.168.0.0/16 # 修改为初始化时配置的"--pod-network-cidr"地址 # 部署 Pod 网络组件 $ kubectl apply -f calico.yaml # 用 watch 命令来实时查看 pod 的状态,包括Pod IP等信息 $ watch -n 2 kubectl get pods --all-namespaces -o wide
八、添加Node
# 添加Node # 添加Worker节点同样要部署Docker和Kubeadm、Kubelet、kubectl # 添加Worker节点必要镜像:Kube-proxy、Pause、Flannel # Flannel镜像注意标签要与Master的"kube-flannel.yml"的一致 $ kubeadm join [机器IP] --token... ---token在部署成功时会提供一个,Copy接上即可 # 示例 $ kubeadm join 192.168.1.2:6443 --token edu7mp.1urvf9xxzsassaw6r \ --discovery-token-ca-cert-hash sha256:5bffddcd0de6979cxczcsdsewqeqwesds4f4dbafc9fd2824805eb86f45 $ journalctl -f ---当前输出的日志 $ journalctl -f -u kubelet ---查看当前Kubelet进程的日志 $ kubeadm token list ---查看 token # 默认 token 有效期24小时,过期后该 token 就不可用了,需重新生成 $ kubeadm token create ---重新生成 token # 获取 CA 证书的 hash 值 $ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | \ openssl rsa -pubin -outform der 2>/dev/null | \ openssl dgst -sha256 -hex | sed 's/^.* //' # 在Woker节点查看Node报端口错? # [root@node-01 ~]# kubectl get nodes # The connection to the server localhost:8080 was refused - did you specify the right host or port? # 解决办法:将Master节点"~/.kube/config"文件的内容复制到Worker节点相同目录下 # "~"是指你在初始化集群的用户 home 目录 # Worker节点如果没有"~/.kube/config"则需要自行创建文件夹和文件
九、本文使用的软件版本概览
# 如果初始化集群失败了,使用以下命令重置 $ kubeadm reset $ ifconfig cni0 down $ ip link delete cni0 $ ifconfig flannel.1 down $ ip link delete flannel.1 $ rm -rf /var/lib/cni/ # Docker $ yum install -y docker-ce-18.09.5 \ docker-ce-cli-18.09.0 \ containerd.io-1.2.6 # Kubernetes $ yum install -y kubelet-1.15.5 \ kubeadm-1.15.5 \ kubectl-1.15.5 # 对应的镜像,镜像来自 hub.docker.com,可自行查找拉取 docker pull mirrorgooglecontainers/kube-apiserver-amd64:v1.15.5 docker pull mirrorgooglecontainers/kube-controller-manager:v1.15.3 docker pull mirrorgooglecontainers/kube-scheduler:v1.15.3 docker pull mirrorgooglecontainers/kube-proxy:v1.15.3 docker pull mirrorgooglecontainers/pause:3.1 docker pull mirrorgooglecontainers/etcd:3.3.10 docker pull coredns/coredns:1.3.1 docker tag mirrorgooglecontainers/kube-apiserver-amd64:v1.15.5 k8s.gcr.io/kube-apiserver:v1.15.5 docker tag mirrorgooglecontainers/kube-controller-manager:v1.15.3 k8s.gcr.io/kube-controller-manager:v1.15.5 docker tag mirrorgooglecontainers/kube-scheduler:v1.15.3 k8s.gcr.io/kube-scheduler:v1.15.5 docker tag mirrorgooglecontainers/kube-proxy:v1.15.3 k8s.gcr.io/kube-proxy:v1.15.5 docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1 docker tag mirrorgooglecontainers/etcd:3.3.10 k8s.gcr.io/etcd:3.3.10 docker tag coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1 docker rmi mirrorgooglecontainers/kube-apiserver-amd64:v1.15.5 docker rmi mirrorgooglecontainers/kube-controller-manager:v1.15.3 docker rmi mirrorgooglecontainers/kube-scheduler:v1.15.3 docker rmi mirrorgooglecontainers/kube-proxy:v1.15.3 docker rmi mirrorgooglecontainers/pause:3.1 docker rmi mirrorgooglecontainers/etcd:3.3.10 docker rmi coredns/coredns:1.3.1
十、文章贡献
https://juejin.cn/post/6844903825485070344 https://juejin.cn/post/6844903943051411469 https://www.kubernetes.org.cn/7315.html https://cloud.tencent.com/developer/article/1525487 https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#instructions
End...