kubernetes系列—Ubuntu下搭建Kubernetes集群--k8s部署
1、kubernetes安装介绍
1.1 K8S架构图
1.2 K8S搭建安装示意图
2、安装kubernetes
2.1 关闭防火墙
在每台机器上关闭防火墙:
① 关闭服务,并设为开机不自启
$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld
或者
$ sudo ufw disable
② 清空防火墙规则
$ sudo iptables -F && sudo iptables -X && sudo iptables -F -t nat && sudo iptables -X -t nat
$ sudo iptables -P FORWARD ACCEPT
2.2 关闭 swap 分区
如果开启了 swap 分区,kubelet 会启动失败(可以通过将参数 --fail-swap-on 设置为false 来忽略 swap on),故需要在每台机器上关闭 swap 分区:
# 临时关闭
swapoff -a # 编辑/etc/fstab,注释掉包含swap的那一行即可,重启后可永久关闭
2.3 配置阿里源
sudo echo "deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list
然后更新下:
sudo apt update
如果遇到以下问题:
可以记下提示的PUBKEY的最后8位,这里是BA07F4FB,然后执行:
gpg --keyserver keyserver.ubuntu.com --recv-keys BA07F4FB
gpg --export --armor BA07F4FB | sudo apt-key add -
sudo apt-get update
2.4. 安装组件
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl #确保不会被自动更新
2.5 配置kubelet的cgroup drive
需要确保kubelet的cgroup drive在docker的一致。
分别可以通过以下命令查看:
docker info | grep -i cgroup cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
若显示不一样,则添加或修改Environment="KUBELET_CGROUP_ARGS=--cgroup-dirver=cgroupfs"
systemctl daemon-reload
systemctl restart kubelet
2.6. 启动kubelet
systemctl enable kubelet && systemctl start kubelet
2.7. 下载K8S的Docker镜像
在/etc/apt/sources.list
中添加阿里源:
deb http://mirrors.aliyun.com/ubuntu/ xenial main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security universe
sudo apt update
更新下源。
首先使用kubeadm config images list
显示我们需要下载的镜像。
然后从mirrorgooglecontainers上把这些镜像都拉下来,以免在初始化的时候从k8s.gcr.io拉取:
试过部分国内镜像源没有v1.18.3镜像,从https://hub.docker.com//mirrorgcrio/xxx
拉取k8s.gcr.io
对应的镜像有效
# docker pull镜像拉取命令
docker pull mirrorgcrio/kube-apiserver:v1.18.3
docker pull mirrorgcrio/kube-controller-manager:v1.18.3
docker pull mirrorgcrio/kube-scheduler:v1.18.3
docker pull mirrorgcrio/kube-proxy:v1.18.3
docker pull mirrorgcrio/pause:3.2
docker pull mirrorgcrio/etcd:3.4.3-0
docker pull mirrorgcrio/coredns:1.6.7 # docker tag镜像重命名
docker tag mirrorgcrio/kube-apiserver:v1.18.3 k8s.gcr.io/kube-apiserver:v1.18.3
docker tag mirrorgcrio/kube-controller-manager:v1.18.3 k8s.gcr.io/kube-controller-manager:v1.18.3
docker tag mirrorgcrio/kube-scheduler:v1.18.3 k8s.gcr.io/kube-scheduler:v1.18.3
docker tag mirrorgcrio/kube-proxy:v1.18.3 k8s.gcr.io/kube-proxy:v1.18.3
docker tag mirrorgcrio/pause:3.2 k8s.gcr.io/pause:3.2
docker tag mirrorgcrio/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0
docker tag mirrorgcrio/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7 # docker image rm命令删除原始镜像
docker image rm mirrorgcrio/kube-apiserver:v1.18.3
docker image rm mirrorgcrio/kube-controller-manager:v1.18.3
docker image rm mirrorgcrio/kube-scheduler:v1.18.3
docker image rm mirrorgcrio/kube-proxy:v1.18.3
docker image rm mirrorgcrio/pause:3.2
docker image rm mirrorgcrio/etcd:3.4.3-0
docker image rm mirrorgcrio/coredns:1.6.7
注意,至此基础的组件都安装完成,接下来要根据是master节点还是普通node节点来分别配置。
2.8 master节点配置
(1)在master节点上运行:
kubeadm init --pod-network-cidr=172.0.0.0/16 --kubernetes-version=v1.18.3 --service-cidr=172.17.0.0/16 --ignore-preflight-errors=Swap --apiserver-advertise-address=172.17.0.2
注释:
- --kubernetes-version=v1.18.3:指定K8S版本,必须和前面导入的镜像一致
- --pod-network-cidr=171.0.0.0/16:表示集群将使用网络的子网范围;
- --service-cidr:指定service网段
- --ignore-preflight-errors=Swap/all:忽略 swap/所有 报错
- --apiserver-advertise-address:表示绑定的网卡IP
若执行kubeadm init出错或强制终止,则再需要执行该命令时,需要先执行kubeadm reset重置。
(2)初始化命令成功后,创建.kube目录
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
(3)此外最后还会提示其他节点加入集群时的命令:
kubeadm join 172.17.0.2:6443 --token zuhiop.bmxq2jofv1j68o9o --discovery-token-ca-cert-hash sha256:b65ca09d1f18ef0af3ded2c831c609dfe48b19c5dc53a8398af5b735603828fb
需要注意的是这里的token值24小时后会失效,因此,当以后还想加入节点时,可以先用kubeadm token list
命令查看当前的token表,并在master节点上执行
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' # 来查看hash。
查看网络状态kubectl get pod -n kube-system
,可以发现都处于Pending阻塞状态,此时,我们需要配置网络,直接使用Calico,即执行:
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml
(注意这里也是有版本号的,如果不是很清楚是多少,可以直接访问官网获取最新的进行尝试:https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/)
过段时间,再执行kubectl get pod -n kube-system
就会发现都处于running状态了。
最后将master设为工作节点:
kubectl taint nodes --all node-role.kubernetes.io/master-
执行成功时会显示
node/xl-virtualbox untainted
对于mater至此配置成功,可以使用kubectl get nodes
命令查看节点状态。当然目前只有一个master节点。
2.9 master节点验证
(1)拉取了必须的镜像
(2)开启了kube-apiserver 的6443端口
[root@master ~]# ss -nutlp
tcp LISTEN 0 128 :::6443 :::* users:(("kube-apiserver",pid=1609,fd=3))
(3)使用kubectl命令查询集群信息
查询组件状态信息
[root@master ~]# kubectl get cs
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health": "true"}
查询集群节点信息(因为还没有部署好flannel,所以节点显示为NotReady)
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady master 13m v1.18.3
查询名称空间,默认
[root@master ~]# kubectl get ns
NAME STATUS AGE
default Active 13m
kube-public Active 13m
kube-system Active 13m
3.0 部署网络插件flannel
(1)直接使用kubectl 执行gitlab上的flannel 部署文件
[root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.extensions/kube-flannel-ds-amd64 created
daemonset.extensions/kube-flannel-ds-arm64 created
daemonset.extensions/kube-flannel-ds-arm created
daemonset.extensions/kube-flannel-ds-ppc64le created
daemonset.extensions/kube-flannel-ds-s390x created
(2)会看到下载好的flannel 的镜像
[root@master ~]# docker image ls |grep flannel
quay.io/coreos/flannel v0.10.0-amd64 f0fad859c909 12 months ago 44.6 MB
quay.io/coreos/flannel v0.9.1 2b736d06ca4c 14 months ago 51.3 MB
(3)验证
① master 节点已经Ready
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 14m v1.18.3
② 查询kube-system名称空间下
[root@master ~]# kubectl get pods -n kube-system(指定名称空间) |grep flannel
NAME READY STATUS RESTARTS AGE
kube-flannel-ds-amd64-4wck2 1/1 Running 0 1m
3、初始化kubernetes node节点
3.1 使用kubeadm join 初始化
初始化node节点;下边的命令是master初始化完成后,下边有提示的操作命令
kubeadm join 172.17.0.2:6443 --token zuhiop.bmxq2jofv1j68o9o --discovery-token-ca-cert-hash sha256:b65ca09d1f18ef0af3ded2c831c609dfe48b19c5dc53a8398af5b735603828fb --ignore-preflight-errors=Swap
如果此时在master节点上使用kubectl get nodes
查看节点的状态时'NotReady',请在对应主机上重启docker服务即可:
systemctl restart docker
3.2 验证集群是否初始化成功
注意:
为了每台节点显示名称不一样,最好是给每个节点设置不同的hostname,可以通过以下命令修改:
hostnamectl set-hostname new-name
文章参考:http://www.cnblogs.com/along21/
最新文章
- Struts2初始(一)
- ob_start()
- linux动态时钟探索
- DB2_SQL_常用知识点&;实践
- 自定义元素–为你的HTML代码定义新元素
- JAVA先进-设置(1)
- 使用 Cordova+Visual Studio 创建跨平台移动应用(3)
- zabbix使用自定义脚本监控内存
- 记踩坑--Flask Web开发:S6电子邮件 ----[Errno 11004] getaddrinfo failed
- MySQL CPU %sys 高的案例分析(三)
- 前端JS校验银行卡卡号和身份证号码(附ES6版方法)
- linux中查看结构体和宏
- Linux Guard Service - 杀死守护进程
- Linux系统——date命令
- WinCE6.0 2012年补丁下载地址
- 配置Docker中国区官方镜像http://get.daocloud.io/ 很好的一个源http://get.daocloud.io/#install-docker
- 在pythonanywhere上部署Django应用
- 物联仓储系统ZigBee组网原理
- iOS 单例模式 学习 ";52个方法 第6章 45条 使用 dispath_once 来执行只需运行一次的线程安全代码";
- 【基础操作】2-sat
热门文章
- ts(typescript)讲解for , for...in..., for...of..., while, every, some, map, filter
- MyLiveCam使用条款与免责协议
- SY有了不适症状吃抗过敏药试试
- C++ 函数类型和函数指针类型的自动推导、声明和赋值
- abap screen页签开发注意事项
- 全国分乡镇第六次人口普查数据shp数据库省市区县街道
- java基于ssm框架开发的视频论坛网站源码
- 运行yarn报错:error C:\liuyan\tools\echarts-5.4.0\node_modules\cwebp-bin: Command failed.
- 全网echarts案例资源大总结和echarts的高效使用技巧(细节版)
- 计数 dp 部分例题(一~五部分)