kubernetes(一)kubeadm搭建k8s集群
使用kubeadm搭建一個k8s集群
1個MasterNode,2個WorkNode
步驟
1.準備3臺centos機器?
可以使用阿里云,也可以使用virtualbox或者vm
MasterNode:?192.168.56.51?
WorkNode:?192.168.56.61 ?192.168.56.62
2.更新并安裝依賴
yum -y update yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp3.安裝docker
## 在每一臺機器上都安裝好Docker,版本為18.09.001 安裝必要的依賴sudo yum install -y yum-utils device-mapper-persistent-data lvm202 設置docker倉庫sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo03 設置阿里云鏡像加速器sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://2a3ats4n.mirror.aliyuncs.com"]}EOFsudo systemctl daemon-reload04 安裝dockeryum install -y docker-ce-18.09.0 docker-ce-cli-18.09.0 containerd.io05 啟動dockersudo systemctl start docker && sudo systemctl enable docker4.修改hosts文件
(1) master
設置master的hostname,并且修改hosts文件
sudo hostnamectl set-hostname m
vi /etc/hosts
192.168.56.51 m
192.168.56.61 w1
192.168.56.62 w2
?(2) 兩個worker
?設置worker01/02的hostname,并且修改hosts文件
?sudo hostnamectl set-hostname w1
?sudo hostnamectl set-hostname w2
vi /etc/hosts
192.168.56.51 m
192.168.56.61 w1
192.168.56.62 w2
成功后可以通過hostname ping 通
5.系統基礎前提配置
# (1)關閉防火墻 systemctl stop firewalld && systemctl disable firewalld# (2)關閉selinux selinux:目的是指明某個進程可以訪問哪個資源setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config# (3)關閉swap 類似于windows下的虛擬內存,用于解決內存不夠的問題 swapoff -a sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab# (4)配置iptables的ACCEPT規則 iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT# (5)設置系統參數 cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF 重啟 sysctl --system6.安裝kubeadm, kubelet and kubectl
(1)配置yum源cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF(2)安裝kubeadm&kubelet&kubectlyum install -y kubeadm-1.14.0-0 kubelet-1.14.0-0 kubectl-1.14.0-0(3)將docker和k8s設置同一個cgroup# 設置docker的cgroup vi /etc/docker/daemon.json"exec-opts": ["native.cgroupdriver=systemd"],systemctl restart docker# 設置kubelet的cgroup 檢驗kubelet的cgroup的方式是否是systemd,如果不是則修改,如果是就輸出 No such file or directorysed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g" /etc/systemd/system/kubelet.service.d/10-kubeadm.confsystemctl enable kubelet && systemctl start kubelet7.下載鏡像
查看發現kubeadm安裝的鏡像都是國外的,所以我們需要提前下載鏡像,并打tag。由于鏡像文件比較多,寫成一個shell腳本執行
創建下載鏡像的kubeadm.sh
#!/bin/bashset -eKUBE_VERSION=v1.14.0 KUBE_PAUSE_VERSION=3.1 ETCD_VERSION=3.3.10 CORE_DNS_VERSION=1.3.1GCR_URL=k8s.gcr.io ALIYUN_URL=registry.cn-shenzhen.aliyuncs.com/chenpp_google_containersimages=(kube-proxy:${KUBE_VERSION} kube-scheduler:${KUBE_VERSION} kube-controller-manager:${KUBE_VERSION} kube-apiserver:${KUBE_VERSION} pause:${KUBE_PAUSE_VERSION} etcd:${ETCD_VERSION} coredns:${CORE_DNS_VERSION})for imageName in ${images[@]} ; dodocker pull $ALIYUN_URL/$imageNamedocker tag $ALIYUN_URL/$imageName $GCR_URL/$imageNamedocker rmi $ALIYUN_URL/$imageName done?
# 運行腳本 sh ./kubeadm.sh查看鏡像,上述需要的鏡像都下載成功
8.kube init初始化master
(1)初始化master節點
##在MasterNode上執行 若要重新初始化集群狀態:kubeadm reset,然后再進行上述操作 kubeadm init --kubernetes-version=1.14.0 --apiserver-advertise-address=192.168.56.51 --pod-network-cidr=10.244.0.0/16保存最后的join信息
(2)根據init最后的提示執行
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/configkubectl cluster-info 查看集群信息
查看當前運行的Pod,發現DNS還處于Pending,因為它需要網絡插件來運行
9.部署calico網絡插件
# 同樣在master節點上操作 # 在k8s中安裝calico kubectl apply -f https://docs.projectcalico.org/v3.9/manifests/calico.yaml至此MasterNode的安裝都成功了
10.將WorkNode添加到集群里
在work上執行上面保存的join命令
kubeadm join 192.168.56.51:6443 --token 40okff.0orjd65xhqezpsht \--discovery-token-ca-cert-hash sha256:b07f41dde98ec41d6c9365a397b8d1c5b07629beb2ceb41b6810af70393bc13d查看一下集群節點,完成
如果重啟虛擬機之后,k8s的命令無法正常執行,并且無法通過systemctl來重啟,如下圖:
可以在每臺節點上都執行一下:kubeadm reset,回到步驟的kubeadm init 重新搭建K8s集群
重新搭建之后如果kubectl?get?nodes,發現nodes狀態變成NotReady
通過kubectl?get?pods?-n?kube-system
檢查下當前的網絡插件是否正常,比如calico,如果不正?;蛘邲]有安裝,參照前面文檔的方式安裝網絡插件calico
總結
以上是生活随笔為你收集整理的kubernetes(一)kubeadm搭建k8s集群的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: docker学习笔记(一)docker入
- 下一篇: docker学习笔记(二)创建自己的镜像