您好,欢迎来到海洋目录网!网站收录,值得选择!长期招友情链接 QQ10212321

快审
当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

我的K8s之路(1)-实践多次的kubeadm部署源生k8s

来源:网站目录 浏览:9次 时间:2020-11-21


kubernetes做为PAAS云的落地平台已经不是新闻了,从2016年开始国内很多云厂纷纷开始做二次研发,一些IT集团根据自己的业务需求,自研适合自身业务的容器编排平台,包括很多大客户的技术提供商,也在为客户的业务应用做平台开发,可巧笔者当初就曾用ansible写过k8s的自动部署脚本,这算是第一次接触k8s。

后来国内考CKA认证的技术人员越来越多,到我考的时候已经有5000多号人了,现在应该更多,CKA认证基本已经成为从业人员的标配。尽管google也好,rancher也罢,包括很多云厂商都有各自的部署工具,但CKA考试还是要从开源版本学起,kubeadm是源生的部署工具,特别考试有一道8分的题,就是在裸机上用kubeadm部署k8s集群。即便不考认证,如果你要从事容器云的相关工作,个人认为也应该从开源版本学起。

再到后来有幸成为红旗教育学院的k8s讲师,想将部署操作k8s的内容做下梳理,故撰成此文。此为第一回,先说部署,后续再慢慢加其它内容。


其实说到源生的K8s部署,刚开始应该先从源码安装开始,这个我也做过几回,优点是能快速熟悉kubernetes架构和组件构成和组件与组件之前的耦合关系。不过从易用性和可用性角度出发,无论是测试还是上生产,我想基本都不会考虑, 费时费力还一堆坑,这个还是留待大伙学习,或我哪天心情特别差的时候再说哈。所以第一回先从kubeadm部署k8s集群开始。

小提示:kubernetes为啥又叫k8s,是因为k与s之间有8个字母,国人的简便称谓。。。。。

好,现在开始部署,首先要准备最起码三台设备,虚拟机也好,物理机也罢,这个随便,建议配置如下:

机器配置:2核CPU,8G内存,40G系统盘
系统:Ubuntu 16.04.6 LTS
机器数量:3台 (master node01 node02)

当然了,你要说内存4G行不行,也可以,一个测试不必要在这方面那么严谨,至于为啥要用Ubuntu,这是CNCF社区的建议版本,其实用centos也一样。能把集群跑起来就算得~

接下来开始基础环境配置(3台都要执行)
(其实这部分属于Linux基础配置,如果对Linux不熟请先自行补课,当然在评论区问我也可以哈)

(1) ### 修改配置静态hostname

hostnamectl set-hostname master1(node01,node02)

(2)### hosts表:

172.16.100.206 master
172.16.100.205 node01
172.16.100.204 node02

(3)### 关闭firewalld

ufw disable

(4)### 关闭SELinux
ubuntu默认关闭SELinux

(5)### 关闭swap
临时关闭:swapoff -a
永久关闭:注释掉/etc/fstab下的swap一行
如果使用swap会影响性能,一般建议关闭,当然你非要用也不是没有办法。

(6)### 更新apt包索引

apt-get update

这个是ubuntu比较方便的地方,随时更新随时新~~

(7)### 安装软件包

apt-get -y install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

这一步的作用是允许apt通过HTTPS使用存储库

(8)### 安装add-apt-repository工具

apt-get -y install software-properties-common

(9)### 添加Docker的官方GPG密钥

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

(10)### 添加稳定的存储库

add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

上两步的是为了安装docker做准备

(11)### 查看Docker版本

apt-cache madison docker-ce

现在已经到19版本了,不过我测试还是用的18.09.9

(12)### 安装docker-ce=5:18.09.9~3-0~ubuntu-bionic

apt-get -y install docker-ce=5:18.09.9~3-0~ubuntu-xenial docker-ce-cli=5:18.09.9~3-0~ubuntu-xenial containerd.io

执行docker info进行验证

(13)### 解决swap报错
执行docker info命令在最后一层会出现:

WARNING: No swap limit support(操作系统下docker内存限制的警告)

执行命令,vim /etc/default/grub 添加或编辑GRUB_CMDLINE_LINUX行以添加这键值:

GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1 net.ifnames=0 vga=792 console=tty0 console=ttyS0,115200n8 noibrs"

更新grub并重启机器

update-grub
reboot

(14)### 解决防火墙转发策略问题
docker 在 1.13 版本之后,将系统iptables 中 FORWARD 链的默认策略设置为 DROP,并为连接到 docker0 网桥的容器添加了ACCEPT规则,
临时解决办法:

iptables -P FORWARD ACCEPT

永久解决办法:

vim /lib/systemd/system/docker.service.
在[Service]下添加:ExecStartPost=/sbin/iptables -P FORWARD ACCEPT

(15)### 设置daemon.json

cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://7bezldxe.mirror.aliyuncs.com/"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF

主要是配置docker的日志和拉取镜像源,registry-mirrorsr使用国内阿里云的源,这很重要,因为如果不配置,默认的源要能***才能搞。
读取配置并重启服务

systemctl daemon-reload && systemctl restart docker.service

(16)### 安装kubeadm、kubelet、kubectl

sudo apt-get update && sudo apt-get install -y apt-transport-https curl
sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

还是一样,kubernetes的源需要***,所以依然用阿里的源,其实搞了k8s才知道阿里云做了很多贡献。
默认安装最高版

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl

本锁定版本

sudo apt-mark hold kubelet kubeadm kubectl

(17)###免密访问(master节点)

ssh-keygen -t rsa
ssh-copy-id k8s-master
ssh-copy-id k8s-node01
ssh-copy-id k8s-node02

到此,基础环境配置完成,接下来开始正式部署。


情况是这样的,测试环境只有一个master,所以是single control-plane的集群,在在master节点执行

(1)### 初始化control-plane节点
生成配置文件

kubeadm config print init-defaults > init-defaults.yaml

kubeadm工具提供部署k8s的默认配置,可以输出为yaml文件,但需要修改。
文件中的镜像源imageRepository为

k8s.gcr.io

安装时默认会从这个源下载镜像,如果不***无法下载,故可事先将其改为:

registry.cn-hangzhou.aliyuncs.com/google_containers

在networking下修改clusterName(集群名称),修改apiservice地址

localAPIEndpoint:
advertiseAddress: 172.16.100.206
clusterName: cluster01

(2)### 执行初始化操作

kubeadm init --config=init-defaults.yaml

或者

kubeadm init \
--kubernetes-version=v1.18.0 \
--apiserver-advertise-address=172.16.100.206

部署现在k8s的最新版1.18.0,执行初始化操作时会先下载镜像,也可以先下载再部署。
列出需下载镜像列表

kubeadm config images list

拉取镜像到本地

kubeadm config images pull

(3)###初始化完成后马上需要做的
执行完初始化后,会有提示如何添加worker节点,与集群管理员帐户配置。
集群管理员帐户配置:

root用户
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /root/.bashrc
source /root/.bashrc
非root用户
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

注意,将添加worker节点命令保存,例如:

kubeadm join 172.16.100.206:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:a84eff9fe6cb5b9b01326b8790f86d73d59b99d124cdc8d8eb8d0208aeaeb905

(4)###检查集群
检查组件状态是否正常

kubectl get componentstatuses

查看集群系统信息

kubectl cluster-info

检查支撑集群运行所有组件

kubectl -n kube-system get all

这些都是集群初始化完成后的基本操做,至此初始化集群完成,接下来开始配置集群。


初始化完成且,需要对集群做配置才可以投入使用

(1)###自动补全
为什么先做它,是因为懒的原因,这步操作可以将kubectl命令,所有参数用tab健补全,就像Linux一样:)

首先,取消bash-completion注释

vim /etc/bash.bashrc
enable bash completion in interactive shells
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
source /etc/bash.bashrc

第二步是查看completion帮助

kubectl completion -h

可获取自动补全的命令

source <(kubectl completion bash)

如果执行一遍只是当前可用,再登陆就不行了。
将kubectl自动补全添加到配置文件中,可以在以后的shell中自动加载

echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc

(2)###配置网络

kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml

注,在集群部署结束后,kube-system命名空间内集群运行所需的所有控制器与POD,其中coredns是未running状态,需要安装网络插件才能running,此步要在添加节点前执行。

(3)###添加work节点
登陆两台work节点,分别执行集群初始化完成时保存的内容,例如:

kubeadm join 172.16.100.206:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:a84eff9fe6cb5b9b01326b8790f86d73d59b99d124cdc8d8eb8d0208aeaeb905

如果没保存,可以用命令生成再执行
创建token

kubeadm token create

查看token

kubeadm token list

获取discovery-token-ca-cert-hash值

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

检查集群节点

kubectl get node

如果出现三台节点都是ready状态,即表示成功,如下所示:

NAME STATUS ROLES AGE VERSION
k8s-master Ready master 23h v1.18.2
k8s-node01 Ready <none> 23h v1.18.2
k8s-node02 Ready <none> 23h v1.18.2

###重新初始化
如果部署遇到问题或报错,需要重新初始化

kubeadm reset

注,master与work节点都要执行

至此,k8s集群部署完成,很多人都说谁也无法保证kubeadm能一次部署成功。基本上照着做的话成功率还是很高的,如果能出现节点状态都ready的话,就可以用了。

不过这里我只写了操作,说实话想着没啥,可写起来这么老多,还牵扯很多k8s组件的运行原理和概念没说,大伙要是看着还行,可以留言讨论,请期待下回,谢谢。

推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net