本文介绍使用 kubeadm 安装 k8s 集群。建议不要用在生产环境。使用 kubeadm 安装,如果 master 节点挂了,是没有办法操作的。
安装版本:
- k8s: 1.12.2
- docker: 17.3.2
防火墙配置
1 | # 关闭 firewalld |
内核参数配置
1 | echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables |
hosts 配置
在 /etc/hosts
文件中配置集群的主机,例如:
1 | 192.168.1.2 master |
yum 源配置
添加 docker 源
CentOS 默认源的docker版本比较低,很多特性不支持,另外k8s对docker版本有要求,这里我们配置 docker-ce
源。
1 | yum-config-manager --add-repo \ |
添加 k8s 源
1 | cat <<EOF > /etc/yum.repos.d/kubernetes.repo |
安装 docker
由于 k8s 对 docker 版本有要求,最新的 docker 版本不一定支持,这里安装指定版本。
1 | # 查看可用版本 |
安装 kubeadm 和 kubectl
1 | yum install -y kubeadm kubectl |
下载 k8s 镜像
由于网络原因,kubeadm 需要的镜像无法下载,这里我们使用别人的代理下载。
查看所需 docker 镜像
1 | # 这个命令仅使用 v1.10 以上 |
添加 pullimages.sh
脚本, 并执行, 脚本内容如下:
1 | #!/bin/bash |
初始化集群
1 | kubeadm init \ |
master 参与调度
默认情况下集群不会调度 pod 到 master 节点,可以执行如下命令来控制
1 | kubectl taint nodes --all node-role.kubernetes.io/master- |
命令补全
1 | yum install -y bash-completion |
servcie 端口范围修改
k8s service 默认的端口范围是 30000-32767, 如果想修改端口范围,进行如下操作:
- 修改 /etc/kubernetes/manifests/kube-apiserver.yaml,添加:
--service-node-port-range=80-32767
- systemctl restart kubelet.service
常见问题
Dns loop detected
编辑 configmap
1
kubectl -n kube-system edit configmap coredns
注释掉 loop
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22apiVersion: v1
data:
Corefile: |
.:53 {
errors
health
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
upstream
fallthrough in-addr.arpa ip6.arpa
}
prometheus :9153
proxy . /etc/resolv.conf
cache 30
#loop
reload
loadbalance
}
kind: ConfigMap
metadata:
creationTimestamp: 2018-11-20T03:08:28Z
name: coredns
token 过期
token 默认有效期是 24h, 如果 token 过期了,创建新 token 再加入集群:
1 | kubeadm token create |
其它节点 pod cidr 问题
- 查看节点是否设置了 pod cide
kubectl get nodes -o jsonpath='{.items[*].spec.podCIDR}'
- 如果没有设置,设置节点的 pod CIDR
kubectl patch node <NODE_NAME> -p '{"spec":{"podCIDR":"<SUBNET>"}}'
节点管理
节点查看
1 | kubectl get nodes -o wide |
删除节点
1 | # 驱赶节点上所有 pod |
驱赶pod后的节点是 SchedulingDisabled
状态。
1 | $ kubectl get node |
新增节点
准备工作
1 | # k8s 使用的是 iptables, 关闭 firewalld 防火墙 |
创建 token
1
2
3
4kubeadm token create
# token 默认有效期是一天,可以用如下命令查看
kubeadm token list计算 SHA256
1
2
3
4openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
# 也可以把这两步合成一部
kubeadm token create --print-join-command加入集群
1
kubeadm join 192.168.100.103:6443 --token zkeshq.asg3o4as2ndg5jch --discovery-token-ca-cert-hash sha256:1fa544d0d7efaf40b4c6a51fa265d856d8a49a7d15fa4fccf195279fd6854f85