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...

posted @ 2020-11-28 16:42  Brother_BigCousin  阅读(114)  评论(0编辑  收藏  举报