一、安装docker
环境:准备3台centos7系统,都安装上docker环境,具体安装步骤和流程如下
参考:
https://docs.docker.com/install/linux/docker-ce/centos/
https://yeasy.gitbooks.io/docker_practice/content/install/
1.1centos7配置yum源
>cd/etc/yum.repos.d/>mkdirrepo_bak>mv*.reporepo_bak/>wgethttp://mirrors.aliyun.com/repo/Centos-7.repo>wgethttp://mirrors.163.com/.help/CentOS7-Base-163.repo>yumcleanall>yummakecache1.2卸载旧版本docker
sudoyumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-latest-logrotate\docker-logrotate\docker-engine1.3使用存储库安装docker安装所需的包
sudoyuminstall-yyum-utils\device-mapper-persistent-data\lvm2使用以下命令设置稳定存储库。
#阿里源,国内速度快sudoyum-config-manager\--add-repo\https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo1.4安装DOCKERCE安装最新docker
sudoyuminstalldocker-cedocker-ce-clicontainerd.io或者yum列出docker再进行安装
yumlistdocker-ce--showduplicates|sort-rsudoyuminstalldocker-ce-
默认情况下,docker命令会使用Unixsocket与Docker引擎通讯。而只有root用户和docker用户才可以访问Docker引擎的Unixsocket。出于安全考虑,一般Linux系统上不会直接使用root用户。因此,更好的做法是将需要使用docker的用户加入docker用户组。
sudogroupadddockersudousermod-aGdocker$USER1.5启动Docker
sudosystemctlstartdocker#启动sudosystemctlenabledocker#开机启动查看有关Docker安装的更多详细信息
docker--versiondockerversiondockerinfo测试hello-world
dockerrunhello-worldListDockerimages
dockerimagelsListDockercontainers(running,all,allinquietmode)
dockercontainerlsdockercontainerls--alldockercontainerls-aq1.6卸载DockerCE
sudoyumremovedocker-cesudorm-rf/var/lib/docker1.7国内加速
vim/etc/docker/daemon.json
加入:
{"registry-mirrors":["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"]}
重启:
$sudosystemctldaemon-reload$sudosystemctlrestartdocker二、安装Kubernetes集群
参考:
https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/
https://blog.csdn.net/MssGuo/article/details/122773155
2.1系统设置
systemctlstopfirewalld#关闭防火墙systemctldisablefirewalld#设置开机不启动[root@master~]#vim/etc/selinux/config#永久关闭selinuxSELINUX=disabled#关闭swap(k8s禁止虚拟内存以提高性能)[root@master~]##永久禁用swap,注释掉/etc/fstab里的swap配置#/dev/mapper/centos-swapswapswapdefaults00#free-h#可查看kubernetes1.14之后的版本推荐使用systemd,但docker默认的CgroupDriver是Cgroup,会使得kubelet部署报错(集群都这样修改)
[root@master~]#dockerinfo|grep-i"CgroupDriver"#查看一下docker使用的CgroupDriver,还真是cgroupfsCgroupDriver:cgroupfs#处理办法:修改/etc/docker/daemon.json文件,添加如下参数:[root@master~]#vim/etc/docker/daemon.json#为了保持所有节点docker配置一致,所以其它节点的docker也改了{"registry-mirrors":["https://b9pmyelo.mirror.aliyuncs.com"],#这句是之前就配置了的,但要注意加一个道号"exec-opts":["native.cgroupdriver=systemd"]#添加这一句}[root@master~]#systemctlrestartdocker[root@master~]#dockerinfo|grep-i"CgroupDriver"#查看验证CgroupDriver:systemd2.2安装kubelet、kubeadm、kubectl
kubelet(真正的k8s服务)运行在Cluster所有节点上,负责启动Pod和容器。
kubeadm(只是工具)用于初始化Cluster。
kubectl(只是工具)是Kubernetes命令行工具。通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件。
配置kubernetes的阿里云yum源(所有节点服务器都需要执行)
cat<
yuminstall-ykubeadm-1.23.1-0kubectl-1.23.1-0kubelet-1.23.1-0设置k8s服务kubelet开机启动(所有节点服务器都需要执行)
#设置开机启动systemctlenablekubelet#启动命令systemctlstartkubelet2.3设置网桥参数
#往k8s.conf文件添加内容cat>/etc/sysctl.d/k8s.conf< cat>>/etc/hosts< 1、创建一个master节点,kubeadminit。 2、将node节点加入kubernetes集群,kubeadmjoin 初始化【master节点】的控制面板 #kubeadminit--help可以查看命令的具体参数用法kubeadminit\--apiserver-advertise-address=192.168.1.20\--image-repositoryregistry.aliyuncs.com/google_containers\--kubernetes-versionv1.23.1\--service-cidr=10.96.0.0/12\--pod-network-cidr=10.244.0.0/16#再开一个窗口,执行dockerimages可以看到,其实执行kubeadminit时k8s去拉取了好多镜像--apiserver-advertise-address=192.168.1.20即master节点的IP--image-repositoryregistry.aliyuncs.com/google_containers设置镜像仓库为国内的阿里云镜像--kubernetes-versionv1.23.1设置k8s的版本--service-cidr=10.96.0.0/12设置node节点的网络--pod-network-cidr指定Pod网络的范围。Kubernetes支持多种网络方案,而且不同网络方案对--pod-network-cidr有自己的要求,这里设置为10.244.0.0/16是因为我们将使用flannel网络方案,必须设置成这个CIDR。2.6成功后的返回以及操作 YourKubernetescontrol-planehasinitializedsuccessfully!Tostartusingyourcluster,youneedtorunthefollowingasaregularuser:mkdir-p$HOME/.kubesudocp-i/etc/kubernetes/admin.conf$HOME/.kube/configsudochown$(id-u):$(id-g)$HOME/.kube/configAlternatively,ifyouaretherootuser,youcanrun:exportKUBECONFIG=/etc/kubernetes/admin.confYoushouldnowdeployapodnetworktothecluster.Run"kubectlapply-f[podnetwork].yaml"withoneoftheoptionslistedat:https://kubernetes.io/docs/concepts/cluster-administration/addons/Thenyoucanjoinanynumberofworkernodesbyrunningthefollowingoneachasroot:kubeadmjoin192.168.1.20:6443--tokendeg1pk.88lgg93hqh74mbcg\--discovery-token-ca-cert-hashsha256:81eeac318c2eba7a06cdabb2b4cb30bfedd4359a7c1cd7b508b68f9f74fddbe52.7将node节点加入集群 使用materinit返回的命令。这段kubeamdjoin命令的token只有24h,24h就过期,需要执行kubeadmtokencreate--print-join-command重新生成。 kubeadmjoin192.168.1.20:6443--tokendeg1pk.88lgg93hqh74mbcg\--discovery-token-ca-cert-hashsha256:81eeac318c2eba7a06cdabb2b4cb30bfedd4359a7c1cd7b508b68f9f74fddbe52.8在master节点配置pod网络创建(部署容器网络,CNI网络插件)node节点加入k8s集群后,在master上执行kubectlgetnodes发现状态是NotReady,因为还没有部署CNI网络插件,其实在步骤四初始化完成master节点的时候k8s已经叫我们去配置pod网络了。在k8s系统上Pod网络的实现依赖于第三方插件进行,这类插件有近数十种之多,较为著名的有flannel、calico、canal和kube-router等,简单易用的实现是为CoreOS提供的flannel项目。 #执行下面这条命令在线配置pod网络,因为是国外网站,所以可能报错,测试去http://ip.tool.chinaz.com/网站查到#域名raw.githubusercontent.com对应的IP,把域名解析配置到/etc/hosts文件,然后执行在线配置pod网络,多尝试几次即可成功。kubectlapply-fhttps://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml 查看pod状态: kubectlgetpods-nkube-system