1.1 官網(wǎng)
官網(wǎng):kubernetes.io
1.2 準(zhǔn)備
三臺(tái)服務(wù)器 2核2G起步阔挠,可以互相ping通
1.3 安裝命令
yum -y update
yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp
1.4 安裝docker
指定阿里云鏡像
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
添加鏡像
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://orptaape.mirror.aliyuncs.com"]
}
EOF
## 安裝指定docker版本
yum install -y docker-ce-18.09.0 docker-ce-cli-18.09.0 container
## 開(kāi)機(jī)啟動(dòng)
sudo systemctl start docker && sudo systemctl enable docker
1.5 修改hostname
#設(shè)置master的hostname,并修改hosts文件
sudo hostnamectl set-hostname m
vi /etc/hosts
192.158.79.104 m
192.158.79.105 w1
192.158.79.106 w2
# worker
sudo hostnamectl set-hostname w1
sudo hostnamectl set-hostname w2
vi /etc/hosts
192.158.79.104 m
192.158.79.105 w1
192.158.79.106 w2
1.6 關(guān)閉相關(guān)服務(wù)
#防火墻
systemctl stop firewalld && systemctl disable firewalld
#關(guān)閉 selinux
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
#關(guān)閉swap
swapoff -a
sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab
#配置iptables的accept規(guī)則
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT
#設(shè)置系統(tǒng)參數(shù)
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
1.7 安裝kubeadm粘昨、kubelet 、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.gpg
? http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
#2 安裝kubeadm&kubelet&kubectl
yum install -y kubeadm-1.14.0-0 kubelet-1.14.0-0 kubectl-1.14.0-0
(報(bào)錯(cuò)了圆恤。提示Error: Package: kubelet-1.14.0-0.x86_64 (kubernetes) Requires: kubernetes-cni = 0.7.5
方式一 : 單獨(dú)安裝下cni yum -y install kubernetes-cni = 0.7.5 該方法導(dǎo)致kubelet版本是1.24.0赤兴,
方式二 : 執(zhí)行 yum -y install kubelet-1.14.0不指定安裝源,單獨(dú)安裝)
#3 docker的k8s設(shè)置同一cgroup
vi /etc/docker/daemon.json
"exec-opts": ["native.cgroupdriver=systemd"],
systemctl restart docker
sed -i "s/cgroup-driver-systemd/cgroup-driver=cgroupfs/g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf (不要去創(chuàng)建文件俭尖,默認(rèn)會(huì)找不到文件)
systemctl enable kubelet && systemctl start kubelet
1.8 proxy/pause/scheduler等國(guó)內(nèi)鏡像
(1)查看kubeadm使用的鏡像
kubeadm config images list
可以發(fā)現(xiàn)這里都是國(guó)外的鏡像
k8s.gcr.io/kube-apiserver:v1.14.0
k8s.gcr.io/kube-controller-manager:v1.14.0
k8s.gcr.io/kube-scheduler:v1.14.0
k8s.gcr.io/kube-proxy:v1.14.0
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.10
k8s.gcr.io/coredns:1.3.1
(2)解決國(guó)外鏡像不能訪問(wèn)的問(wèn)題
- 創(chuàng)建kubeadm.sh腳本氢惋,用于拉取鏡像/打tag/刪除原有鏡像
#/bin/bash
set -e
KUBE_VERSION=v1.14.0
KUBE_PAUSE_VERSION=3.1
ETCD_VERSION=3.3.10
CORE_DNS_VERSION=1.3.1
GCR_URL=k8s.gcr.io
ALIYUN_URL=registry.cn-hangzhou.aliyuncs.com/google_containers
images=(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[@]} ; do
docker pull $ALIYUN_URL/$imageName
docker tag $ALIYUN_URL/$imageName $GCR_URL/$imageName
docker rmi $ALIYUN_URL/$imageName
done
- 運(yùn)行腳本和查看鏡像
運(yùn)行腳本
sh ./kubeadm.sh
查看鏡像
docker images
1.9kube init初始化master
(1)初始化master節(jié)點(diǎn)
官網(wǎng):https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
注意
:此操作是在主節(jié)點(diǎn)上進(jìn)行
本地有鏡像
kubeadm init --kubernetes-version=1.14.0 --apiserver-advertise-address=192.158.79.104 --pod-network-cidr=10.244.0.0/16
【若要重新初始化集群狀態(tài):kubeadm reset,然后再進(jìn)行上述操作】
(2)kube init流程
01-進(jìn)行一系列檢查稽犁,以確定這臺(tái)機(jī)器可以部署kubernetes
02-生成kubernetes對(duì)外提供服務(wù)所需要的各種證書可對(duì)應(yīng)目錄
/etc/kubernetes/pki/*03-為其他組件生成訪問(wèn)kube-ApiServer所需的配置文件
ls /etc/kubernetes/
admin.conf controller-manager.conf kubelet.conf scheduler.conf04-為 Master組件生成Pod配置文件焰望。
ls /etc/kubernetes/manifests/*.yaml
kube-apiserver.yaml
kube-controller-manager.yaml
kube-scheduler.yaml05-生成etcd的Pod YAML文件。
ls /etc/kubernetes/manifests/*.yaml
kube-apiserver.yaml
kube-controller-manager.yaml
kube-scheduler.yaml
etcd.yaml06一旦這些 YAML 文件出現(xiàn)在被 kubelet 監(jiān)視的/etc/kubernetes/manifests/目錄下已亥,kubelet就會(huì)自動(dòng)創(chuàng)建這>些yaml文件定義的pod熊赖,即master組件的容器。master容器啟動(dòng)后虑椎,kubeadm會(huì)通過(guò)檢查localhost:>6443/healthz這個(gè)master組件的健康狀態(tài)檢查URL震鹉,等待master組件完全運(yùn)行起來(lái)
07-為集群生成一個(gè)bootstrap token
08-將ca.crt等 Master節(jié)點(diǎn)的重要信息的妖,通過(guò)ConfigMap的方式保存在etcd中,工后續(xù)部署node節(jié)點(diǎn)使用
09-最后一步是安裝默認(rèn)插件足陨,kubernetes默認(rèn)kube-proxy和DNS兩個(gè)插件是必須安裝的
記得保存好最后kubeadm join的信息
(3)根據(jù)日志提示
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
此時(shí)kubectl cluster-info查看一下是否成功
(4)查看pod驗(yàn)證一下
等待一會(huì)兒嫂粟,同時(shí)可以發(fā)現(xiàn)像etc,controller墨缘,scheduler等組件都以pod的方式安裝成功了
注意
:coredns沒(méi)有啟動(dòng)星虹,需要安裝網(wǎng)絡(luò)插件
kubectl get pods -n kube-system
(5)健康檢查
curl -k https://localhost:6443/healthz
1.10 部署calico網(wǎng)絡(luò)插件
選擇網(wǎng)絡(luò)插件:https://kubernetes.io/docs/concepts/cluster-administration/addons/
calico網(wǎng)絡(luò)插件:https://docs.projectcalico.org/v3.9/getting-started/kubernetes/
calico,同樣在master節(jié)點(diǎn)上操作
在k8s中安裝calico
kubectl apply -f https://docs.projectcalico.org/v3.9/manifests/calico.yaml
確認(rèn)一下calico是否安裝成功
kubectl get pods --all-namespaces -w
1.11 kube join
記得保存初始化master節(jié)點(diǎn)的最后打印信息【注意這邊大家要自己的镊讼,下面我的只是一個(gè)參考】
kubeadm join 192.158.79.104:6443 --token 4vbaf1.lz0y2zmc79mwjkc6 \
--discovery-token-ca-cert-hash sha256:91defe84ffe72d0774207d5eaf24e2998941f30988d70c61f7f4beb5d30386f0
(1)在woker01和worker02上執(zhí)行上述命令
(2)在master節(jié)點(diǎn)上檢查集群信息
kubectl get nodes
NAME STATUS ROLES AGE VERSION
master-kubeadm-k8s Ready master 19m v1.14.0
worker01-kubeadm-k8s Ready <none> 3m6s v1.14.0
worker02-kubeadm-k8s Ready <none> 2m41s v1.14.0
1.12 再次體驗(yàn)Pod
(1)定義pod.yml文件宽涌,比如pod_nginx_rs.yaml
cat > pod_nginx_rs.yaml <<EOF
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx
labels:
tier: frontend
spec:
replicas: 3
selector:
matchLabels:
tier: frontend
template:
metadata:
name: nginx
labels:
tier: frontend
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
EOF
(2)根據(jù)pod_nginx_rs.yml文件創(chuàng)建pod
kubectl apply -f pod_nginx_rs.yaml
(3)查看pod
kubectl get pods -o wide
kubectl describe pod nginx
(4)感受通過(guò)rs將pod擴(kuò)容
kubectl scale rs nginx --replicas=5
kubectl get pods -o wide
(5)刪除pod
kubectl delete -f pod_nginx_rs.yaml
感謝咕泡學(xué)院Jack老師的指導(dǎo)。