0%

Kubernetes集群搭建(二进制)

  1. 禁用swap

    1
    swapoff -a
  2. 查看这些端口是否被占用,如果被占用,请手动释放。

    1
    netstat -ntlp |grep -E '6443|23[79,80]|1025[0,1,2]' 
  3. 安装 kubectl

    1
    2
    3
    4
    5
    $  wget https://dl.k8s.io/v1.10.7/kubernetes-client-linux-amd64.tar.gz
    $ echo '169b57c6707ed8d8be9643b0088631e5c0c6a37a5e99205f03c1199cd32bc61e kubernetes-client-linux-amd64.tar.gz' | sha256sum -c -
    $ tar zxf kubernetes-client-linux-amd64.tar.gz
    $ sudo mv kubernetes/client/bin/kubectl /usr/local/bin/kubectl
    $ /usr/local/bin/kubectl version --client
  4. 安装 kubeadm 和 kubelet

1
2
3
4
5
6
7
8
9
10
11
12
$ wget -q https://dl.k8s.io/v1.11.3/kubernetes-server-linux-amd64.tar.gz
如不能访问请使用以下方式下载
链接: https://pan.baidu.com/s/1FSEcEUplQQGsjyBIZ6j2fA 提取码: cu4s

$ echo 'e49d0db1791555d73add107d2110d54487df538b35b9dde0c5590ac4c5e9e039 kubernetes-server-linux-amd64.tar.gz' | sha256sum -c -
$ tar -zxf kubernetes-server-linux-amd64.tar.gz
$ mv kubernetes/server/bin/kube{adm,ctl,let} /usr/bin/

$ kubeadm version
$ kubectl version --client
$ kubelet --version

  1. 配置 kubelet
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ cat <<EOF > /etc/systemd/system/kubelet.service
[Unit]
Description=kubelet: The Kubernetes Agent
Documentation=http://kubernetes.io/docs/

[Service]
ExecStart=/usr/bin/kubelet
Restart=always
StartLimitInterval=0
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

1
2
3
4
5
6
7
8
9
10
11
$ mkdir -p /etc/systemd/system/kubelet.service.d
$ cat <<EOF > /etc/systemd/system/kubelet.service.d/kubeadm.conf
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
EnvironmentFile=-/etc/default/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
EOF
$ systemctl enable kubelet

6.
安装前置依赖 crictl

1
2
3
4
$ wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.11.1/crictl-v1.11.1-linux-amd64.tar.gz
$ echo 'ccf83574556793ceb01717dc91c66b70f183c60c2bbec70283939aae8fdef768 crictl-v1.11.1-linux-amd64.tar.gz' | sha256sum -c -
$ tar zxvf crictl-v1.11.1-linux-amd64.tar.gz
$ mv crictl /usr/bin/

安装前置依赖 socat

1
2
yum install -y socat
apt-get install -y socat
  1. 配置集群网络 + 初始化集群
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
$ kubeadm reset 

# 使用 flannel
$ kubeadm init --pod-network-cidr=10.244.0.0/16
会遇到如下异常:
kubeadm config images pull命令一直卡死
解决方式:
国内的代码托管平台提供了一个[仓库](https://gitee.com/K8S-release/kubeadm)
对每个 tar 文件执行 sudo docker load -i xx.tar 即可将镜像导入.

# 验证
$ kubectl get nodes
会遇到如下异常:
The connection to the server localhost:8080 was refused - did you specify the right host or port?
解决方式:
# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 验证
$ kubectl get nodes -o yaml
会遇到如下异常:
lastTransitionTime: 2018-09-20T01:09:48Z
message: 'runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady
message:docker: network plugin is not ready: cni config uninitialized'
reason: KubeletNotReady
解决方式:
$ sysctl net.bridge.bridge-nf-call-iptables=1
# 注意,这里的 flannel 配置仅适用于 1.11 版本的 K8S,若安装其他版本的 K8S 需要替换掉此链接
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml
# 检查状态
kubectl get pods --all-namespaces

  1. 新增 Node

    1
    2
    3
    4
    $ kubeadm join 10.4.65.33:6443 --token ci6511.ydxqtk4kx3vrqq5m --discovery-token-ca-cert-hash sha256:e2d8ba4692ead9649bae6dfd1b3459e4fc1ade5c05fb6868fccf03d8f4e87c8c

    # 在master上验证
    $ kubectl get nodes
  2. 可能会遇到的问题

    1
    /run/flannel/subnet.env: no such file or directory

参考:#

  1. 动手实践:搭建一个 Kubernetes 集群 - 生产可用