Install K8s offline

Giang Trung
3 min readSep 8, 2020

# Ref:
https://docs.genesys.com/Documentation/GCXI/9.0.0/Dep/DockerOffline#DownloadDocker
https://www.centlinux.com/2019/04/install-kubernetes-k8s-offline-on-centos-7.html

# Docker

## Online machine
```
sudo yum install -y yum-utils
sudo yum-config-manager — add-repo https://download.docker.com/linux/centos/docker-ce.repo

mkdir /home/duy/rpm_k8s

sudo yumdownloader — assumeyes — destdir=/home/duy/rpm_k8s/yum — resolve yum-utils
sudo yumdownloader — assumeyes — destdir=/home/duy/rpm_k8s/dm — resolve device-mapper-persistent-data
sudo yumdownloader — assumeyes — destdir=/home/duy/rpm_k8s/lvm2 — resolve lvm2
sudo yumdownloader — assumeyes — destdir=/home/duy/rpm_k8s/docker-ce — resolve docker-ce
sudo yumdownloader — assumeyes — destdir=/home/duy/rpm_k8s/se — resolve selinux-policy-targeted
#sudo yumdownloader — assumeyes — destdir=/home/duy/rpm_k8s/se — resolve container-selinux

# or download directly from http://mirror.centos.org/centos/7/extras/x86_64/Packages/
wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.119.1-1.c57a6f9.el7.noarch.rpm
sudo mv container-selinux-2.119.1–1.c57a6f9.el7.noarch.rpm /home/duy/rpm_k8s/se/
```

## Offline machine
```
yum install -y --cacheonly --disablerepo=* /home/duy/rpm_k8s/yum/*.rpm
yum install -y --cacheonly --disablerepo=* /home/duy/rpm_k8s/dm/*.rpm
yum install -y --cacheonly --disablerepo=* /home/duy/rpm_k8s/lvm2/*.rpm
yum install -y --cacheonly --disablerepo=* /home/duy/rpm_k8s/se/*.rpm
yum install -y --cacheonly --disablerepo=* /home/duy/rpm_k8s/docker-ce/*.rpm

systemctl start docker
systemctl status docker
docker version
```

# Kubernetes

## Online machine
```
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

sudo yumdownloader — assumeyes — destdir=/home/duy/rpm_k8s — resolve yum-utils kubeadm-1.18.* kubelet-1.18.* kubectl-1.18.* ebtables

#### Execute the following command to run kubeadm, which returns a list of required images:
kubeadm config images list
eg:
k8s.gcr.io/kube-apiserver:v1.18.8
k8s.gcr.io/kube-controller-manager:v1.18.8
k8s.gcr.io/kube-scheduler:v1.18.8
k8s.gcr.io/kube-proxy:v1.18.8
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3–0
k8s.gcr.io/coredns:1.6.7

sudo chmod -R 777 /home/duy
cd /home/duy/rpm_k8s
sudo docker pull k8s.gcr.io/kube-apiserver:v1.18.8
sudo docker save k8s.gcr.io/kube-apiserver:v1.18.8 > kube-apiserver_v1.18.8.tar
sudo docker pull k8s.gcr.io/kube-controller-manager:v1.18.8
sudo docker save k8s.gcr.io/kube-controller-manager:v1.18.8 > kube-controller-manager_v1.18.8.tar
sudo docker pull k8s.gcr.io/k8s.gcr.io/kube-scheduler:v1.18.8
sudo docker save k8s.gcr.io/k8s.gcr.io/kube-scheduler:v1.18.8 > kube-scheduler_v1.18.8.tar
sudo docker pull k8s.gcr.io/k8s.gcr.io/kube-proxy:v1.18.8
sudo docker save k8s.gcr.io/k8s.gcr.io/kube-proxy:v1.18.8 > kube-proxy_v1.18.8.tar
sudo docker pull k8s.gcr.io/k8s.gcr.io/pause:3.2
sudo docker save k8s.gcr.io/k8s.gcr.io/pause:3.2 > pause_3.2.tar
sudo docker pull k8s.gcr.io/k8s.gcr.io/etcd:3.4.3–0
sudo docker save k8s.gcr.io/k8s.gcr.io/etcd:3.4.3–0 > etcd_3.4.3–0.tar
sudo docker pull k8s.gcr.io/k8s.gcr.io/coredns:1.6.7
sudo docker save k8s.gcr.io/k8s.gcr.io/coredns:1.6.7 > coredns_1.6.7.tar

### network
sudo docker pull quay.io/coreos/flannel:v0.12.0-amd64
sudo docker save quay.io/coreos/flannel:v0.12.0-amd64 > flannel_v0.12.0_v1.tar

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

```
## Offline machine
sudo yum install -y — cacheonly — disablerepo=* /home/duy/rpm_k8s/*.rpm
kubeadm config images list

### docker load images
sudo docker load < kube-apiserver_v1.18.8.tar
sudo docker load < kube-controller-manager_v1.18.8.tar
sudo docker load < kube-scheduler_v1.18.8.tar
sudo docker load < kube-proxy_v1.18.8.tar
sudo docker load < pause_3.2.tar
sudo docker load < etcd_3.4.3–0.tar
sudo docker load < coredns_1.6.7.tar
sudo docker load < flannel_v0.12.0_v1.tar

###

## Setting

sudo su
swapoff -a

setenforce 0
sed -i ‘s/^SELINUX=enforcing$/SELINUX=permissive/’ /etc/selinux/config

cat <<EOF > /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
modprobe br_netfilter
sysctl — system

source <(kubectl completion bash)
kubectl completion bash > /etc/bash_completion.d/kubectl

echo ‘1’ > /proc/sys/net/ipv4/ip_forward
kubeadm init — kubernetes-version=v1.18.8
‘’’
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run “kubectl apply -f [podnetwork].yaml” with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 10.111.125.123:6443 — token jsy4b5.29scy63rftuu9as4 \
— discovery-token-ca-cert-hash sha256:a3c8b2528033ce7cf710ffa398cae880331bff7f690d93357dd54607e9a32991
‘’’

exit
sudo systemctl start kubelet
sudo systemctl enable docker
sudo systemctl enable kubelet

--

--