Version
compont | version |
---|---|
docker | 19.03.8 |
kubernetes | 1.17.4 |
安装docker
卸载旧版本
1 | # 在 master 节点和 worker 节点都要执行 |
设置 yum repository
1 | # 在 master 节点和 worker 节点都要执行 |
安装并启动 docker1
2
3
4# 在 master 节点和 worker 节点都要执行
yum install -y docker-ce-19.03.8 docker-ce-cli-19.03.8 containerd.io
systemctl enable docker
systemctl start docker
检查 docker 版本
1 | # 在 master 节点和 worker 节点都要执行 |
安装可能遇到的报错
Docker安装报错container-selinux >= 2.5-11
这个报错是container-selinux版本低或者是没安装的原因,yum 安装container-selinux 一般的yum源又找不到这个包,需要安装epel源 才能yum安装container-selinux,然后再安装docker-ce就可以了
1 | wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo |
安装 nfs-utils
1 | # 在 master 节点和 worker 节点都要执行 |
必须先安装 nfs-utils 才能挂载 nfs 网络存储
K8S基本配置
配置K8S的yum源
1 | # 在 master 节点和 worker 节点都要执行 |
关闭 SeLinux、swap1
2
3
4
5
6
7
8
9# 在 master 节点和 worker 节点都要执行
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
swapoff -a
yes | cp /etc/fstab /etc/fstab_bak
cat /etc/fstab_bak |grep -v swap > /etc/fstab
修改 /etc/sysctl.conf
在 master 节点和 worker 节点都要执行
vim /etc/sysctl.conf
向其中添加
1 | net.ipv4.ip_forward = 1 |
如下所示
1 | # System default settings live in /usr/lib/sysctl.d/00-system.conf. |
执行命令以应用
1 | # 在 master 节点和 worker 节点都要执行 |
安装kubelet、kubeadm、kubectl
1 | # 在 master 节点和 worker 节点都要执行 |
修改docker Cgroup Driver为systemd,并设置 docker 镜像
/etc/docker/daemon.json
1 | { |
重启 docker,并启动 kubelet1
2
3
4# 在 master 节点和 worker 节点都要执行
systemctl daemon-reload
systemctl restart docker
systemctl enable kubelet && systemctl start kubelet
初始化 master 节点
以 root 身份在 demo-master-a-1 机器上执行。
创建 ./kubeadm-config.yaml
1 | # 只在 master 节点执行 |
podSubnet 所使用的网段不能与节点所在的网段重叠
初始化 apiserver1
2# 只在 master 节点执行
kubeadm init --config=kubeadm-config.yaml --upload-certs --node-name xxx.xx.xx.xx
根据您服务器网速的情况,您需要等候 1 – 10 分钟
初始化 root 用户的 kubectl 配置
1 | # 只在 master 节点执行 |
安装 calico or weave(用calico出问题,换用weave)
[好像需要系统内核在4.0以上]
1 | # 只在 master 节点执行 |
等待calico安装就绪.
网络组建改用weave
Reference
1 | kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')&disable-npc=true" |
网络组件用flannel
https://github.com/coreos/flannel
1 | kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml |
执行如下命令,等待 3-10 分钟,直到所有的容器组处于 Running 状态1
2# 只在 master 节点执行
watch kubectl get pod -n kube-system
检查 master 初始化结果
在 master 节点 demo-master-a-1 上执行1
2# 只在 master 节点执行
kubectl get nodes
初始化 worker节点
获得 join命令参数
在 master 节点 demo-master-a-1 节点执行1
2# 只在 master 节点执行
kubeadm token create --print-join-command
可获取kubeadm join 命令及参数,如下所示
kubeadm token create 命令的输出
1 | kubeadm join apiserver.demo:6443 --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303 |
#初始化worker
针对所有的 worker 节点执行(执行上面那个从master得到的指令)
1 | # 只在 worker 节点执行 |
如果需要以ip的形式不是主机名
1 | # 只在 worker 节点执行 |
如果出现如下的报错1
2
3
4
5
6error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR DirAvailable--etc-kubernetes-manifests]: /etc/kubernetes/manifests is not empty
[ERROR FileAvailable--etc-kubernetes-kubelet.conf]: /etc/kubernetes/kubelet.conf already exists
[ERROR Port-10250]: Port 10250 is in use
[ERROR FileAvailable--etc-kubernetes-pki-ca.crt]: /etc/kubernetes/pki/ca.crt already exists
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
在节点上先执行如下命令,清理kubeadm的操作,然后再重新执行join 命令:1
kubeadm reset
检查初始化结果
在 master 节点 demo-master-a-1 上执行1
2# 只在 master 节点执行
kubectl get nodes
1 | NAME STATUS ROLES AGE VERSION |
移除 worker 节点
正常情况下,您无需移除 worker 节点,如果添加到集群出错,您可以移除 worker 节点,再重新尝试添加
在准备移除的 worker 节点上执行
1 | # 只在 worker 节点执行 |
在 master 节点 demo-master-a-1 上执行
1 | # 只在 master 节点执行 |
将 demo-worker-x-x 替换为要移除的 worker 节点的名字
worker 节点的名字可以通过在节点 demo-master-a-1 上执行 kubectl get nodes 命令获得
Kubernetes Dashboard的安装与坑
提前声明:因为dashboard是使用https访问的,所以有证书的问题,安装后无法访问请不要慌张。
获取yaml
Kubernetes 默认没有部署 Dashboard,可通过如下命令安装:
可以到Git上获取对应的部署文件
1 | https://github.com/kubernetes/dashboard/releases |
dashboard需要跟kubernetes的版本对应。
获取对应的部署文档
1 | https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc6/aio/deploy/recommended.yaml |
证书的制作,如果不需要的可以跳过
生成证书通过openssl生成自签名证书即可,不再赘述,参考如下所示:
1 | [root@master keys]# pwd |
这样就有了证书文件dashboard.crt 和 私钥 dashboad.key
可以在配置文件中,修改service 为nodeport类型,固定访问端口
修改前:
1 | kind: Service |
修改后: 修改两个地方。type: NodePort 和 nodePort:30001
1 | kind: Service |
生成secret
创建同名称的secret:
名称为: kubernetes-dashboard-certs
1 | [root@master keys]# ls |
部署apply yaml文件
1 | kubectl apply -f kubernetes-dashboard.yaml |
查看服务状态:
1 | [root@master keys]# kubectl -n kube-system get svc |
不过有些同学先装kubernetes-dashboard,得先删除对应的service和证书,需要通过下面的指令1
kubectl delete -f kubernetes-dashboard.yml
如果是通过下面的方式直接装的删除语句就得修改了。
1 | kubectl apply -f http://mirror.faasx.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml |
1 | kubectl delete -f http://mirror.faasx.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml |
登录
Dashboard 支持 Kubeconfig 和 Token 两种认证方式,为了简化配置,我们通过配置文件 dashboard-admin.yaml 为 Dashboard 默认用户赋予 admin 权限。
1 | [root@ken ~]# cat dashboard-admin.yml |
执行kubectl apply使之生效
1
kubectl apply -f dashboard-admin.yml
现在直接点击登录页面的 SKIP 就可以进入 Dashboard 了。
token模式
获取token 这里有一个简单的命令:1
kubectl -n kube-system describe $(kubectl -n kube-system get secret -n kube-system -o name | grep namespace) | grep token
坑
UI
ui可能会乱跑。。不一定在生成的证书的那台服务器
需要修改yml,配置nodeSelector来指定pod落在指定的node上。
vxlan
使用weave作为网络组件时,正常使用 ifconfig会出现vxlan,如下图
可是在某些情况,可能会没有,没有的情况在某些时候会出现网络堵塞或者容器网络有问题,导致程序假死。定时炸弹,很可怕
笔主在搭建时候,20台机器,其中有7台机器没有vxlan,flink集群在高峰期的时候,吞吐死活上不去,重构集群到另一批机器就上去了。。
这个时候需要观察一下内核版本
1 | uname -a |
一开始的版本是
1 | 3.10.0-327.36.2.el7.x86_64 #1 SMP Mon Jul 9 17:25:01 CST 2016 x86_64 x86_64 x86_64 GNU/Linux |
正常的版本是
1 | 3.10.0-1062.12.1.el7 #3 SMP Mon Jul 9 17:25:01 CST 2018 x86_64 x86_64 x86_64 GNU/Linux |
更新下内核版本即可。
1 | yum update kernel |
然后重启服务器
1 | shutdown -r now |
一键安装脚本
如需要自己添加仓库地址,join到集群需要自己操作
1 | yum remove -y docker \ |
Reference
https://www.kubernetes.org.cn/5650.html
https://www.jianshu.com/p/c6d560d12d50
https://www.cnblogs.com/kenken2018/p/10340157.html
https://blog.csdn.net/supermao1013/article/details/85050781