一個或者多個兼容 deb 或者 rpm 軟件包的操做系統,好比 Ubuntu 或者 CentOShtml
每臺機器 2 GB 以上的內存,內存不足時應用會受限制node
主節點上 2 CPU 以上linux
集羣裏全部的機器有徹底的網絡鏈接,公有網絡或者私有網絡均可以git
sudo systemctl stop firewalld.service #中止firewall sudo systemctl disable firewalld.service #禁止firewall開機啓動 sudo firewall-cmd --state #查看防火牆狀態
vim /etc/sysctl.conf net.ipv4.ip_forward = 1
生效命令sysctl -pgithub
cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system
swapoff -a
修改 /etc/fstab 文件,註釋掉 SWAP 的自動掛載,使用free -m
確認swap已經關閉。 docker
修改主機名hostnamectl set-hostname <主機名> --staticjson
每臺主機/etc/hosts指明vim
一、docker ce安裝centos
https://docs.docker.com/install/linux/docker-ce/centos/api
https://kubernetes.io/docs/setup/cri/
# Install Docker CE ## Set up the repository ### Install required packages. yum install yum-utils device-mapper-persistent-data lvm2 ### Add Docker repository. yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo ## Install Docker CE. yum install -y --setopt=obsoletes=0 docker-ce-18.09.5-3.el7 ## Create /etc/docker directory. mkdir /etc/docker # Setup daemon. cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ] } EOF systemctl enable docker systemctl restart docker
查看能夠安裝包
yum list docker-ce --showduplicates
二、kubelet kubeadm kubectl安裝(v1.14.1)
https://kubernetes.io/zh/docs/setup/independent/install-kubeadm/
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 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg exclude=kube* EOF
setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
或者指定版本
yum install -y kubelet-1.14.1 kubeadm-1.14.1 kubectl-1.14.1 --disableexcludes=kubernetes
systemctl enable kubelet && systemctl start kubelet
從運行結果能夠看到kubelet處於按期重啓的狀態,只有當在master節點執行kubeadm init 或者在worker節點執行kubeadm join時候。kubelet所須要的配置才能被知足。這個時候kubelet纔會正常運行起來。
三、k8s主要組件安裝
kubeadm config images list --kubernetes-version=v1.14.1
鏡像源路徑 gcr.io/google_containers
因爲國內的網絡緣由,在搭建環境時,常常沒法pull到這些鏡像。能夠利用Docker Hub搭建本身的鏡像倉庫。
一、經過GitHub建立一個倉庫kubernetes
cd kubernetes git init git remote add origin git@github.com:shhnwangjian/kubernetes.git mkdir kube-apiserver cd kube-apiserver
FROM gcr.io/google_containers/kube-apiserver:v1.14.1 MAINTAINER shhnwangjian
其它目錄和Dockerfile也須要建立
git add . git commit -m "kubernetes Dockerfile v1.14.1" git push origin master
填寫的內容是kube-apiserver-amd64
點擊建立後,進入這個Repositories
輸入對應信息點擊 SAVE
點擊Trigger進行構建,構建成功後,
經過執行 docker login 命令交互式的輸入用戶名及密碼來完成在命令行界面登陸 Docker Hub
經過命令docker pull shhnwangjian/kube-apiserver:v1.14.1 下載到本地鏡像源
參考文章:https://www.jianshu.com/p/11a804080230
下載列表
docker pull shhnwangjian/kube-apiserver:v1.14.1 docker pull shhnwangjian/kube-controller-manager:v1.14.1 docker pull shhnwangjian/kube-scheduler:v1.14.1 docker pull shhnwangjian/kube-proxy:v1.14.1 docker pull shhnwangjian/etcd:3.3.10 docker pull shhnwangjian/pause:3.1 docker pull shhnwangjian/coredns:1.3.1
從新打標籤
docker tag shhnwangjian/kube-apiserver:v1.14.1 k8s.gcr.io/kube-apiserver:v1.14.1 docker tag shhnwangjian/kube-controller-manager:v1.14.1 k8s.gcr.io/kube-controller-manager:v1.14.1 docker tag shhnwangjian/kube-scheduler:v1.14.1 k8s.gcr.io/kube-scheduler:v1.14.1 docker tag shhnwangjian/kube-proxy:v1.14.1 k8s.gcr.io/kube-proxy:v1.14.1 docker tag shhnwangjian/etcd:3.3.10 k8s.gcr.io/etcd:3.3.10 docker tag shhnwangjian/pause:3.1 k8s.gcr.io/pause:3.1 docker tag shhnwangjian/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1
kubeadm init引導和初始化master
備註:https://k8smeetup.github.io/docs/admin/kubeadm/ (kubeadm 設置工具參考指南)
kubeadm init --apiserver-advertise-address=192.168.31.153 --pod-network-cidr=10.244.0.0/20 --kubernetes-version=v1.14.1
提示須要關閉swap
vim /etc/fstab
執行重啓命令reboot now,再次執行上面的init命令
kubeadm join 192.168.31.153:6443 --token zbp38a.gv1kdti4ycnjp2j4 \ --discovery-token-ca-cert-hash sha256:0f447fa079d9db4242f2d3cb1edbe118e67b0935a8ba8dfd7501b8626d4b31be
記下其中的token,加入node節點時會用到。
初始化若是遇到問題,可使用下面的命令進行清理再從新初始化:sudo kubeadm reset
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
查看一下集羣狀態,確認個組件都處於healthy狀態
kubectl get cs
mkdir -p ~/k8s/ cd ~/k8s wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
執行 kubectl apply -f kube-flannel.yml
使用kubectl get pod --all-namespaces -o wide
確保全部的Pod都處於Running狀態
注意:默認token的有效期爲24小時,當過時以後,該token就不可用了。此時能夠從新生成token:
kubeadm token generate kubeadm token create <generated-token> --print-join-command --ttl=0
在每臺node節點執行
若是遇到問題,可使用命令kubeadm reset進行清理再從新初始化
在master節點執行命令成功以下圖
將master節點的admin.conf同步到node節點
scp /etc/kubernetes/admin.conf root@192.168.31.144:/etc/kubernetes
在node節點執行
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
此時能夠在node節點執行kubectl命令
參考文章:
https://blog.frognew.com/2019/04/kubeadm-install-kubernetes-1.14.html