#原创分享#深信服CNP平台容器服务类比K8s+Docker(一)
  

灵峰气韵 33371人觉得有帮助

{{ttag.title}}
“当前已有100+用户参与分享,共计发放奖励60000+“



某公司 CNP容器服务提供了应用级的服务器管理解决方案,实现了应用运维和硬件运维的解构分离。为企业提供轻量、快速、高效的容器应用部署、运行、运维和弹性伸缩的基础设施服务,让开发团队更加专注于业务创新,增强市场竞争力。提能增效,为企业内外交付提供统一的容器标准,大大降低企业的交付和运维管理成本。赋能企业敏捷开发、微服务化、DevOps、技术中台、数据中台等各种应用场景。
先从K8s+Docker讲起,CNP平台跟某公司投资和战略合作的某速云平台,后续再讲。

Kubernetes 版 本 查 阅 地 址 : https://github.com/kubernetes/kubernetes/releases

一、实践环境准备
1. 服务器虚拟机准备
IP地址
节点角色
CPU
Memory
Hostname
***
master and etcd
>=2c
>=2G
master
***
worker
>=2c
>=2G
node

本实验我这里用的VM是vmware workstation创建的,每个给了4C 4G 100GB配置,大家根据自己的资源情况,按照上面给的建议最低值创建即可。

注意:hostname不能有大写字母,比如Master这样。

2. 软件版本
系统类型
Kubernetes版
docker版本
kubeadm版本
kubectl版本
kubelet版本
CentOS7.5.180
4
v1.13
18.06.1-ce
v1.13
v1.13
v1.13

注意:开源软件,版本非常敏感和重要!
1. 环境初始化操作
1.1 配置hostname
$ hostnamectl set-hostname master
$ hostnamectl set-hostname node

每台机器上设置对应好hostname,注意,不能有大写字母!

1.2 配置/etc/hosts
注意,hosts文件非常重要,请在每个节点上执行: cat <<EOF > /etc/hosts 127.0.0.1
localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain
localhost6 localhost6.localdomain6 192.168.1.11
master *** node EOF

1.3 关闭防火墙、selinux、swap # 停防火墙
$ systemctl stop firewalld
$ systemctl disable firewalld

# 关闭Selinux
$ setenforce 0
$ sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux
$ sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
$ sed -i "s/^SELINUX=permissive/SELINUX=disabled/g" /etc/sysconfig/selinux
$ sed -i "s/^SELINUX=permissive/SELINUX=disabled/g" /etc/selinux/config

# 关闭Swap
$ swapoff –a
$ sed -i 's/.*swap.*/#&/' /etc/fstab

# 加载br_netfilter
$ modprobe br_netfilter

1.4 配置内核参数
# 配置sysctl内核参数
$ cat > /etc/sysctl.d/k8s.conf <<EOF net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1 EOF

# 生效文件
$ sysctl -p /etc/sysctl.d/k8s.conf

# 修改Linux 资源配置文件,调高ulimit最大打开数和systemctl管理的服务文件最大打开数
$ echo "* soft nofile 655360" >> /etc/security/limits.conf
$ echo "* hard nofile 655360" >> /etc/security/limits.conf
$ echo "* soft nproc 655360"  >> /etc/security/limits.conf
$ echo "* hard nproc 655360" >> /etc/security/limits.conf
$ echo "* soft  memlock  unlimited"  >> /etc/security/limits.conf
$ echo "* hard memlock  unlimited"  >> /etc/security/limits.conf
$        echo        "DefaultLimitNOFILE=1024000"        >>        /etc/systemd/system.conf        $        echo "DefaultLimitNPROC=1024000" >> /etc/systemd/system.conf

2. 配置CentOS YUM
# 配置国内tencent yum源地址、epel源地址、Kubernetes源地址
$ yum install -y wget $ rm -rf /etc/yum.repos.d/*
$        wget        -O        /etc/yum.repos.d/CentOS-Base.repohttp://mirrors.cloud.tencent.com/repo/centos7_base.repo
$ wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
$ yum clean all && yum makecache

#配置国内Kubernetes源地址
$ cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes]
name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7- x86_64/
enabled=1 gpgcheck=1 repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

EOF

3. 安装依赖软件包
有些依赖包我们要把它安装上,方便到时候使用
$ yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp bash-completion yum-utils device-mapper-persistent-data lvm2 net-tools conntrack-tools vim libtool-ltdl

4. 时间同步配置
Kubernetes是分布式的,各个节点系统时间需要同步对应上。
$ yum install chrony –y
$ systemctl enable chronyd.service && systemctl start chronyd.service && systemctl status chronyd.service
$ chronyc sources
运行date命令看下系统时间,过一会儿时间就会同步。

1. 配置节点间ssh互信
配置ssh互信,那么节点之间就能无密访问,方便日后执行自动化部署
$ ssh-keygen        # 每台机器执行这个命令, 一路回车即可
$ ssh-copy-id  node        # 到master上拷贝公钥到其他节点,这里需要输入 yes和密码

2. 初始化环境配置检查
- 重启,做完以上所有操作,最好reboot重启一遍
- ping 每个节点hostname 看是否能ping通
- ssh 对方hostname看互信是否无密码访问成功
- 执行date命令查看每个节点时间是否正确
- 执行 ulimit -Hn 看下最大文件打开数是否是655360
- cat /etc/sysconfig/selinux |grep disabled 查看下每个节点selinux是否都是disabled状态


二、docker安装

Kubernetes 是容器调度编排PaaS平台,那么docker是必不可少要安装的。最新Kubernetes 1.13 支持最新的docker版本是18.06.1,那么我们就安装最新的 docker-ce 18.06.1

具 体 Kubernetes changelog 文 档 地 址 : https://github.com/kubernetes/ku ... GELOG-1.12.md#v1123

1. remove旧版本docker
$ yum remove -y docker docker-ce docker-common docker-selinux docker-engine

2. 设置docker yum
$        yum-config-manager        --add-repo        https://download.docker.com/linux/centos/docker- ce.repo

3. 列出docker版本
$ yum list docker-ce --showduplicates | sort -r

4. 安装docker 指定18.06.1
$ yum install -y docker-ce-18.06.1.ce-3.el7

5. 配置镜像加速器和docker数据存放路径
$ tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://q2hy3fzi.mirror.aliyuncs.com"], "graph": "/tol/docker-data"
} EOF

6. 启动docker
$ systemctl daemon-reload && systemctl restart docker && systemctl enable docker && systemctl status docker
# 查看docker 版本
$ docker --version


三、安装kubeadm、kubelet、kubectl
这一步是所有节点都得安装(包括node节点)

1. 工具说明
• kubeadm: 部署集群用的命令
• kubelet: 在集群中每台机器上都要运行的组件,负责管理pod、容器的生命周期
• kubectl: 集群管理工具

2. yum 安装
# 安装工具
$ yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

# 启动kubelet
$ systemctl enable kubelet && systemctl start kubelet 注意:kubelet 服务会暂时启动不了,先不用管它。

四、镜像下载准备
1. 初始化获取要下载的镜像列表
使用kubeadm来搭建Kubernetes,那么就需要下载得到Kubernetes运行的对应基础镜像,比如:kube- proxy、kube-apiserver、kube-controller-manager等等 。那么有什么方法可以得知要下载哪些镜像呢?从kubeadm v1.11+版本开始,增加了一个kubeadm config print-default 命令,可以让我们方便的将kubeadm的默认配置输出到文件中,这个文件里就包含了搭建K8S对应版本需要的基础配置环境。另外,我们也可以执行 kubeadm config images list 命令查看依赖需要安装的镜像列表。
注意: 这个列表显示的tag 名字和镜像版本号, 从Kubernetes v1.12+ 开始, 镜像名后面不带amd64, arm, arm64, ppc64le 这样的标识了。

1.1 生成默认kubeadm.conf文件
# 执行这个命令就生成了一个kubeadm.conf文件
$ kubeadm config print init-defaults > kubeadm.conf
1.2 绕过墙下载镜像方法(注意认真看,后期版本安装也可以套用这方法)

注意这个配置文件默认会从google的镜像仓库地址k8s.gcr.io下载镜像,如果你没有科学上网,那么就会下载不来。因此,我们通过下面的方法把地址改成国内的,比如用阿里的:
$ sed -i "s/imageRepository: .*/imageRepository: registry.aliyuncs.com/google_containers/g" kubeadm.conf

1.3指定kubeadm安装的Kubernetes版本
我们这次要安装的Kubernetes版本是v1.13,所以我们要修改下:
$ sed -i "s/kubernetesVersion: .*/kubernetesVersion: v1.13.0/g" kubeadm.conf
1.4 下载需要用到的镜像
kubeadm.conf修改好后,我们执行下面命令就可以自动从国内下载需要用到的镜像了:
$ kubeadm config images pull --config kubeadm.conf
自动下载v1.13需要用到的镜像,执行 docker images 可以看到下载好的镜像列表:
注:除了上面的方法,还有一种方式是搭建自己的镜像仓库。不过前提你得下载好对应的版本镜像,然后上传到你镜像仓库里,然后pull下载。不过上面我提到的方法更加方便省事。
1.5 docker tag 镜像

镜像下载好后,我们还需要tag下载好的镜像,让下载好的镜像都是带有 k8s.gcr.io 标识的,目前我们从阿里下载的镜像 标识都是, 如果不打tag变成k8s.gcr.io, 那么后面用kubeadm安装会出现问题, 因为kubeadm里面只认 google自身的模式。我们执行下面命令即可完成tag标识更换:
$        docker        tag        registry.aliyuncs.com/google_containers/kube-apiserver:v1.13.0 k8s.gcr.io/kube-apiserver:v1.13.0
$        docker        tag        registry.aliyuncs.com/google_containers/kube-controller-manager:v1.13.0 k8s.gcr.io/kube-controller-manager:v1.13.0
$        docker        tag        registry.aliyuncs.com/google_containers/kube-scheduler:v1.13.0 k8s.gcr.io/kube-scheduler:v1.13.0
$   docker tag  registry.aliyuncs.com/google_containers/kube-proxy:v1.13.0        k8s.gcr.io/kube- proxy:v1.13.0
$  docker tag registry.aliyuncs.com/google_containers/pause:3.1        k8s.gcr.io/pause:3.1
$  docker tag registry.aliyuncs.com/google_containers/etcd:3.2.24        k8s.gcr.io/etcd:3.2.24
$  docker tag registry.aliyuncs.com/google_containers/coredns:1.2.6        k8s.gcr.io/coredns:1.2.6
1.6 docker rmi 清理下载的镜像
执行完上面tag镜像的命令,我们还需要把带有 registry.aliyuncs.com 标识的镜像删除,执行:
$ docker rmi registry.aliyuncs.com/google_containers/kube-apiserver:v1.13.0
$ docker rmi registry.aliyuncs.com/google_containers/kube-controller-manager:v1.13.0
$ docker rmi registry.aliyuncs.com/google_containers/kube-scheduler:v1.13.0
$ docker rmi registry.aliyuncs.com/google_containers/kube-proxy:v1.13.0
$ docker rmi registry.aliyuncs.com/google_containers/pause:3.1
$ docker rmi registry.aliyuncs.com/google_containers/etcd:3.2.24
$ docker rmi registry.aliyuncs.com/google_containers/coredns:1.2.6
1.7 查看下载的镜像列表
执行docker images命令,即可查看到,这里结果如下,您下载处理后,结果需要跟这里的一致:
注:以上操作其实可以写到一个脚本里,然后自动处理。另外两个master节点,重复上面的操作下载即可。

打赏鼓励作者,期待更多好文!

打赏
15人已打赏

酒慰风尘 发表于 2020-9-12 17:40
  
这是高手
一个无趣的人 发表于 2020-9-12 22:41
  
优秀。一看就是大佬,技术都是玩的最新的,Docker技术以后一定很火。
Sangfor_闪电回_朱丽 发表于 2020-9-14 10:19
  
您好,您的文章已被收录到原创分享计划并放到技术博客中,以便让更多的小伙伴们关注和学习,文章将交由专家评审小组评审,S奖励预计在一周后到账,其他奖励在活动结束后统一安排发放!
发文越多,奖励越多,期待您更多的精彩文章哦!:感恩:
点击查看本季原创内容要求及奖励规则:http://bbs.sangfor.com.cn/forum.php?mod=viewthread&tid=120679
TCN 发表于 2020-9-14 10:25
  
向大佬学习新知识
小宫 发表于 2020-9-14 15:00
  
楼主,是你让我深深地理解了‘人外有人,天外有天’这句话。谢谢你!在看完这帖子以后,我没有立即回复,因为我生怕我庸俗不堪的回复会玷污了这社区少有的帖子。但是我还是回复了,因为觉得如果不能在如此精彩的帖子后面留下自己的网名,那我会遗憾终生的!
陈璨 发表于 2020-9-15 00:09
  
这是高手啊,羡慕了
暗夜星空 发表于 2020-9-15 08:02
  
mark,学习一下
新手170263 发表于 2020-9-15 09:02
  

优秀。一看就是大佬,技术都是玩的最新的,Docker技术以后一定很火。
新手081074 发表于 2020-9-16 07:52
  
感谢分享
发表新帖
热门标签
全部标签>
每日一问
技术盲盒
干货满满
每周精选
技术笔记
标准化排查
产品连连看
技术晨报
GIF动图学习
新版本体验
技术咨询
安装部署配置
2023技术争霸赛专题
功能体验
信服课堂视频
玩转零信任
通用技术
秒懂零信任
自助服务平台操作指引
答题自测
每日一记
技术圆桌
在线直播
问题分析处理
用户认证
畅聊IT
专家问答
MVP
网络基础知识
升级
安全攻防
上网策略
测试报告
日志审计
流量管理
运维工具
云计算知识
原创分享
解决方案
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
SDP百科
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
排障笔记本
产品预警公告
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
深信服技术支持平台
社区帮助指南
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
2024年技术争霸赛

本版版主

217
277
151

发帖

粉丝

关注

本版达人

皮皮虾·真

本周建议达人

郑州网络

本周分享达人

二进制网络

本周提问达人