“当前已有100+用户参与分享,共计发放奖励60000+“
某公司 CNP容器服务提供了应用级的服务器管理解决方案,实现了应用运维和硬件运维的解构分离。为企业提供轻量、快速、高效的容器应用部署、运行、运维和弹性伸缩的基础设施服务,让开发团队更加专注于业务创新,增强市场竞争力。提能增效,为企业内外交付提供统一的容器标准,大大降低企业的交付和运维管理成本。赋能企业敏捷开发、微服务化、DevOps、技术中台、数据中台等各种应用场景。 先从K8s+Docker讲起,CNP平台跟某公司投资和战略合作的某速云平台,后续再讲。
一、实践环境准备
1. 服务器虚拟机准备
本实验我这里用的VM是vmware workstation创建的,每个给了4C 4G 100GB配置,大家根据自己的资源情况,按照上面给的建议最低值创建即可。
注意:hostname不能有大写字母,比如Master这样。
2. 软件版本
注意:开源软件,版本非常敏感和重要! 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/* $ 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
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
1. remove旧版本docker$ yum remove -y docker docker-ce docker-common docker-selinux docker-engine
2. 设置docker yum源
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节点,重复上面的操作下载即可。
|