kubernetes(k8s)集群部署

文章目录

  • kubernetes(k8s)集群部署
    • 部署步骤

kubernetes(k8s)集群部署

部署步骤

1.实验环境

主机名(IP) 	服务
server1(172.25.70.1) 	harbor仓库
server2(172.25.70.2) 	master
server3(172.25.70.3) 	node1
server4(172.25.70.4) 	node2

内存需要大于2G
master至少要有两cpu
关闭上述主机的防火墙,selinx,设置每台主机可以上网

server1私有仓库在docker篇已经做好,这里只需重新启动

2.具体步骤
1.时间同步
集群管理都需要同步时间(同一母盘封装的虚拟机则不需要,时间本来就是同步的),在这里作出演示。

在真机上外网同步aliyun的时间,虚拟机内网同步真机时间

vim /etc/chrony.conf
systemctl start chronyd.service
chronyc sources -v  

kubernetes(k8s)集群部署_第1张图片kubernetes(k8s)集群部署_第2张图片
在其它三台主机上同步主机的时间

yum install chrony.x86_64 -y
vim /etc/chrony.conf 
#第3行添加
server 172.25.70.250 iburst  #真机ip

systemctl start chronyd.service
systemctl enable --now chronyd
chronyc sources -v

kubernetes(k8s)集群部署_第3张图片
2.建好私有仓库,并保证所有节点都可正常访问私有仓库。
做好master对node的免密访问

ssh-keygen 
ssh-copy-id server3
ssh-copy-id server4

3.所有主机添加k8s的yum源
可以使用阿里云提供的k8s源:阿里云k8s地址

kubernetes(k8s)集群部署_第4张图片
4.所有节点安装k8s的相应软件,并让docker和kubelet开机自启

yum install -y kubelet kubeadm kubectl 
#kubeadm: 用来初始化集群的指令。 kubelet: 在集群中的每个节点上用来启动 pod 和 container 等。 kubectl: 用来与集群通信的命令行工具。
systemctl start docker
systemctl enable --now docker 
systemctl start kubelet
systemctl enable --now kubelet

kubernetes(k8s)集群部署_第5张图片在这里插入图片描述
5.默认docker 的驱动是cgroup 更改docker的驱动为 systemd,与k8s一致
修改方式可以参考k8s官方文档:修改docker驱动

vim /etc/docker/daemon.json 
添加:
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}

systemctl daemon-reload
systemctl restart docker

kubernetes(k8s)集群部署_第6张图片
kubernetes(k8s)集群部署_第7张图片
在这里插入图片描述
其他节点如上所示

6.所有节点关闭交换分区,保证在物理内存中运行

swapoff -a  
vim /etc/fstab      注释swap 开机不启动

在这里插入图片描述在这里插入图片描述
7.kubeadm配置信息

kubeadm config print init-defaults         # 初始化信息
kubeadm config images list                  #查看默认仓库

kubernetes(k8s)集群部署_第8张图片
所以从aliyun上下载镜像,然后导入私有仓库,让其他主机从私有仓库中下载

sever1上启动私有仓库 server2登陆仓库,上传镜像

在私有仓库创建新的项目
kubernetes(k8s)集群部署_第9张图片
批量修改名称,上传

docker images |grep registry.aliyuncs.com
docker images |grep registry.aliyuncs.com|awk '{print $1":"$2}'

for i in `docker images |grep registry.aliyuncs.com|awk '{print $1":"$2}'|awk -F / '{print $3}'`;do docker tag registry.aliyuncs.com/google_containers/$i westos.org/k8s/$i;done

for i in `docker images |grep westos.org/k8s|awk '{print $1":"$2}'`;do docker push $i ;done

kubernetes(k8s)集群部署_第10张图片kubernetes(k8s)集群部署_第11张图片
node测试私有仓库能否拉取镜像:

docker pull westos.org/k8s/kube-proxy:v1.18.2

kubernetes(k8s)集群部署_第12张图片
master删除多余的镜像

for i in `docker images |grep registry.aliyuncs.com/google_containers|awk '{print $1":"$2}'`;do docker rmi $i ;done

kubernetes(k8s)集群部署_第13张图片
8.master节点初始化,选择一个 Pod 网络模型,并检查是否在 kubeadm 初始化过程中需要传入什么参数。设置 --Pod-network-cidr 来指定网络驱动的 CIDR。

使用Flannel模型 因为从私有仓库下载镜像,所以要指定版本,不然会报错

主节点初始化

kubelet --version #查看版本
kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository westos.org/k8s --kubernetes-version=v1.18.2

在这里插入图片描述在这里插入图片描述
token用来校验客户端的合法性 hash用来校验server端 token有时间限制,如果过期再create 创建

其它节点加入

kubeadm join 172.25.70.2:6443 --token 30q7ha.3rbur4fhoy8j12nw \
    --discovery-token-ca-cert-hash sha256:4db083ac2b5b9c4175219731ddef3fd4887391d240325582d6256813880c2a82 

kubernetes(k8s)集群部署_第14张图片
官方不推荐使用超户,所以创建普通用户来管理服务

useradd kubeadm
visudo

su - kubeadm
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

在这里插入图片描述
此时节点是notready

kubectl get nodes

kubernetes(k8s)集群部署_第15张图片
而且组件还有没有running的

kubectl get pod -n kube-system

kubernetes(k8s)集群部署_第16张图片
使命令能够补齐

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

kubernetes(k8s)集群部署_第17张图片
没有网络驱动,dns不能运行
kubernetes(k8s)集群部署_第18张图片
添加网络模型

kubectl create -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

kubernetes(k8s)集群部署_第19张图片

kubectl get pod -n kube-system -o wide #看到pod运行在哪个节点

kubernetes(k8s)集群部署_第20张图片
k8s集群部署成功

你可能感兴趣的:(#,k8s,企业实战)