概念介绍
• kubectl:客户端命令行工具,将接受的命令格式化后发送给kube-apiserver,
作为整个系统的操作入口。
• kube-apiserver:作为整个系统的控制入口,以REST API服务提供接口。
• kube-controller-manager:用来执行整个系统中的后台任务,包括节点状态状
况、Pod个数、Pods和Service的关联等。
• kube-scheduler: 负责节点资源管理,接受来自kube-apiserver创建Pods任务,
并分配到某个节点。
• etcd:负责节点间的服务发现和配置共享。
• kube-proxy: 运行在每个计算节点上,负责Pod网络代理。定时从etcd获取到
service信息来做相应的策略。
• kubelet:运行在每个计算节点上,作为agent,接受分配该节点的Pods任务及
管理容器,周期性获取容器状态,反馈给kube-apiserver。
硬件环境:
Master 4G 4核 centos7.4 172.16.210.11
Node1 2G 4核 centos7.4 172.16.210.12
Node2 2G 4核 centos7.4 172.16.210.13
准备工作:
以下所有操作没有特意指明在那台主机的,均在所有节点执行
安装常用工具
[root@master-11 ~]# yum install -y wget vim net-tools bash-completion ntpdate
关闭防火墙和selinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
关闭swap分区
swapoff -a #关闭swap分区
sed -i 's#^/dev/mapper/centos-swap#\#&#' /etc/fstab #设置开启也不启动swap分区
同步三台主机的主机名解析
[root@master-11 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.210.11 master-11 master
172.16.210.12 node1-12 node1
172.16.210.13 node2-13 node2
添加内核转发:
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl -p ##使添加的内核参数立即生效
同步时间
ntpdate time.windows.com
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
添加centos源和k8s源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
cat <<EOF > /etc/yum.repos.d/k8s.repo
[k8s]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
EOF
添加docker源
yum install -y yum-utils device-mapper-persistent-data lvm2 ##安装相关docker依赖工具
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装docker,启动并加入开机自启
yum install -y docker-ce
systemctl start docker ; systemctl enable docker
配置docker加速器并重启docker
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://jo6348gu.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
systemctl daemon-reload
systemctl restart docker
安装kubelet kubeaddm kubectl
yum install -y kubelet-1.18.2-0 kubeadm-1.18.2-0 kubectl-1.18.2-0 --disableexcludes=kubernetes
启动kubelet,并加入开机自启
systemctl start kubelet ; systemctl enable kubelet
初始化master
在master节点执行
kubeadm init 初始化master
--image-repository 指定镜像仓库
--kubernetes-version 指定k8s版本
--pod-network-cidr pod通讯网段
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.18.2 --pod-network-cidr=10.244.0.0/16
初始化完成master后执行初始化提示命令,拷贝配置文件并设置相关组和用户
在master节点执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
使用kubectl get nodes 查看节点状态,可以发现master是NotReady状态,那是因为我们还没有配置k8s的网络
[root@master-11 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master-11 NotReady master 24m v1.18.2
安装calico网络--在master上执行
下载配置calico配置l文件
wget https://docs.projectcalico.org/manifests/calico.yaml
下载calicol网络镜像,我已经提前上传在个人服务器,所以可以直接拉取
wget ftp://www.lcvcqg.top/calico.tar
docker load -i calico.tar ##解压镜像
开始创建网络
kubectl apply -f calicol.yml
如果使用flanel网络可以执行下面命令
echo "151.101.76.133 raw.githubusercontent.com" >>/etc/hosts
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
再次查看master状态
当k8s的calico网络pod正常运行后,再查看节点状态,就能看见master状态是Ready了
[root@master-11 ~]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-578894d4cd-k4ccx 1/1 Running 0 89m
calico-node-4svc2 1/1 Running 0 89m
coredns-7ff77c879f-sz87s 1/1 Running 0 10h
coredns-7ff77c879f-v8vg8 1/1 Running 0 10h
etcd-master-11 1/1 Running 0 10h
kube-apiserver-master-11 1/1 Running 0 10h
kube-controller-manager-master-11 1/1 Running 4 10h
kube-proxy-4q2fg 1/1 Running 0 10h
kube-scheduler-master-11 1/1 Running 5 10h
[root@master-11 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master-11 Ready master 27m v1.18.2
配置k8s加入节点
在master上将calico镜像压缩包传到其他两个节点
[root@master-11 ~]# scp calico.tar node-1:~
[root@master-11 ~]# scp calico.tar node-2:~
在两个节点解压镜像
docker load -i calico.tar
一开始初始化完成后,会有个加入节点命令,后期,如果忘记加入节点命令,也可以再master上使用kubeadm token create --print-join-command
来打印加入节点命令
[root@master-11 ~]# kubeadm token create --print-join-command
kubeadm join 172.16.210.11:6443 --token 0lw7fo.f7bq3j9cew279xiq --discovery-token-ca-cert-hash sha256:f23039a8839b751e67404b1db072430d8d88c404cc2fff7b29a56cc7fb291d3a
在node1和node上执行
kubeadm join 172.16.210.11:6443 --token wy8kjt.kngsfv56bg2ork7i --discovery-token-ca-cert-hash sha256:f23039a8839b751e67404b1db072430d8d88c404cc2fff7b29a56cc7fb291d3a
回到master节点,查看集群状态,发现状态是Ready,即为添加成功
[root@master-11 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master-11 Ready master 77s v1.18.2
node1-12 Ready <none> 21s v1.18.2
node2-13 Ready <none> 12s v1.18.2
如果没有短时间没有ready,是因为网络没有部署好,我们可以稍等一会再次查看。
设置设置kubectl可以使用tab键
在master上执行
[root@master-11 ~]# sed -i '$asource <(kubectl completion bash)' /etc/profile
[root@master-11 ~]# source /etc/profile
网友评论