Docker和K8S安裝

Docker簡介

	Docker是一個開源的容器引擎,它有助於更快地交付應用。 Docker可將應用程序和基礎設施層隔離,並且能將基礎設施當作程序一樣進行管理。使用 Docker可更快地打包、測試以及部署應用程序,並可以縮短從編寫到部署運行代碼的週期。
	Docker 讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的 Linux 機器上,便可以實現虛擬化。Docker改變了虛擬化的方式,使開發者可以直接將自己的成果放入Docker中進行管理。方便快捷已經是 Docker的最大優勢,過去需要用數天乃至數週的 任務,在Docker容器的處理下,只需要數秒就能完成。

docker 安裝

ubuntu 安裝 docker

	  apt-get update && apt-get install -y apt-transport-https curl
	 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
	 apt-get install docker.io -y 
	 docker version

Docker常用命令

查看可用的鏡像(以java爲例)

		docker search java

下載鏡像

		docker pull java:8

列出鏡像

	docker images 
	即可列出已下載的鏡像 

刪除本地鏡像

	docker rmi java

新建並啓動容器

	使用以下docker run命令即可新建並啓動一個容器,該命令是最常用的命令,它有很多選項,下面將列舉一些常用的選項。
-d選項:表示後臺運行
-P選項:隨機端口映射
-p選項:指定端口映射,有以下四種格式。
-- ip:hostPort:containerPort
-- ip::containerPort
-- hostPort:containerPort
-- containerPort
--net選項:指定網絡模式,該選項有以下可選參數:
--net=bridge:默認選項,表示連接到默認的網橋。
--net=host:容器使用宿主機的網絡。
--net=container:NAME-or-ID:告訴 Docker讓新建的容器使用已有容器的網絡配置。
--net=none:不配置該容器的網絡,用戶可自定義網絡配置。
 docker run -d -p 91:80 nginx
這樣就能啓動一個 Nginx容器。在本例中,爲 docker run添加了兩個參數,含義如下:
-d 後臺運行
-p 宿主機端口:容器端口 #開放容器端口到宿主機端口
訪問 http://Docker宿主機 IP:91/

列出容器

		docker ps -a

停止容器

	docker stop f0b1c8ab3633(容器ID)

強制停止容器

	docker kill f0b1c8ab3633

啓動已停止的容器

		docker start f0b1c8ab3633

查看容器所有信息

		docker inspect f0b1c8ab3633

查看容器日誌

	docker container logs f0b1c8ab3633

查看容器裏的進程

		docker top f0b1c8ab3633

進入容器

	使用docker container exec命令用於進入一個正在運行的docker容器。如果docker run命令運行容器的時候,沒有使用-it參數,就要用這個命令進入容器。一旦進入了容器,就可以在容器的 Shell 執行命令了
docker container exec -it f0b1c8ab3633 /bin/bash

刪除容器

		docker rm f0b1c8ab3633

使用docker部署nginx

	docker pull nginx:latest
	 1.docker images
	 2. mkdir -p /root/docker/my-dinner/nginx/config/
	3.  配置nginx http代理 nginx-lb.conf
		docker run --name nginx-lb -d -p 80:80 -v /root/docker/my-dinner/nginx/config/nginx-lb.conf:/etc/nginx/nginx.conf  nginx:latest
	4. 使用ngix 作爲http server服務器,啓動兩個 http server實例。 nginx.conf
		docker run --name nginx-test -d -p 8081:80 -v /root/docker/my-dinner/nginx/config/nginx.conf:/etc/nginx/nginx.conf -v /root/docker/my-dinner/nginx/www:/usr/share/nginx/html:/usr/share/nginx/html -v /root/docker/my-dinner/nginx/logs/:/var/log/nginx nginx:txy
		docker run --name nginx-test2 -d -p 8082:80 -v /root/docker/my-dinner/nginx/config/nginx.conf:/etc/nginx/nginx.conf -v /root/docker/my-dinner/nginx/www2:/usr/share/nginx/html -v /root/docker/my-dinner/nginx/logs2/:/var/log/nginx nginx:txy
**3 volume**
volume也是繞過container的文件系統,直接將數據寫到host機器上,只是volume是被docker管理的,docker下所有的volume都在host機器上的指定目錄下/var/lib/docker/volumes。
docker run -d -p 8081:80 -v /root/docker/nginx:/mydata nginx:txy
將  /root/docker/nginx 掛載到 容器裏 的 /mydata 目錄
如果volume是空的則container中的目錄也會是空,但是如果volume中已經有內容,則會將其拷貝到container中的目錄。
***要使在宿主機上做的修改能在docker裏馬上生效,則需要設置 文件的權限爲777

K8S 安裝

	  DNS 設置 
		/etc/resolvconf/resolv.conf.d/base 	
		nameserver 192.168.1.1
		resolvconf -u
	**2)安裝 k8s**
		https://blog.csdn.net/wangchunfa122/article/details/86529406 //Ubuntu16.04安裝K8s步驟和踩坑記錄
		https://www.jianshu.com/p/67083a454fcc
		https://www.jianshu.com/p/f2d4dd4d1fb1 ubuntu 安裝 k8s
		https://www.cnblogs.com/ericnie/p/7749588.html ******
		https://blog.csdn.net/u012570862/article/details/80150988 ****
		https://blog.csdn.net/zhonglinzhang/article/details/85279788 k8s啓動參數
		
		2.1) 關閉 swap
			swapoff -a
			同時把/etc/fstab包含swap那行記錄刪掉。
		
		2.2) 更新源並安裝 kubeadm, kubectl, kubelet 軟件包
			apt-get update -y 
			apt-get install -y apt-transport-https
			設置源
				在 /etc/apt/sources.list 和 /etc/apt/sources.list.d/kubernetes.list 增加
				deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
			添加祕鑰(master 和 node)
				curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
		 2.3) 安裝 k8s組件
			apt-get update
			apt-get install -y kubelet kubeadm kubectl
			systemctl enable kubelet
	   2.4) 使用 kubeadmin 初始化 master 節點
		docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.13.2
		docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.13.2
		docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.13.2
		docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1
		docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.2.24
		docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.2.6
		docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.13.2
		把這些images重新tag一下
		docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.13.2 k8s.gcr.io/kube-controller-manager:v1.13.2
		docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.13.2 k8s.gcr.io/kube-scheduler:v1.13.2
		docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.13.2 k8s.gcr.io/kube-proxy:v1.13.2
		docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1 k8s.gcr.io/pause:3.1
		docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.2.24 k8s.gcr.io/etcd:3.2.24
		docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.2.6 k8s.gcr.io/coredns:1.2.6
		docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.13.2 k8s.gcr.io/kube-apiserver:v1.13.2

		#設置 docker 和 kubelet 的 cgroupdriver 爲 cgroupfs 不然啓動kubelet要失敗
		vim /etc/docker/daemon.json		
			{
			  "registry-mirrors": [
				"https://dockerhub.azk8s.cn",
				"https://reg-mirror.qiniu.com",
				"https://quay-mirror.qiniu.com"
			  ],
			  "exec-opts": [ "native.cgroupdriver=cgroupfs" ],
			  "live-restore": true
			}
		#接着執行
		systemctl daemon-reload && systemctl restart docker
		
		vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf(或者/lib/systemd/system/kubelet.service)
		[Service]
			ExecStart=
			ExecStart=/usr/bin/kubelet --kubeconfig=/etc/kubernetes/kubelet.conf  --pod-manifest-path=/etc/kubernetes/manifests  --cgroup-driver=cgroupfs --feature-gates SupportPodPidsLimit=false --feature-gates SupportNodePidsLimit=false
		#接着執行
		systemctl daemon-reload && systemctl restart kubelet (或者 systemctl start  kubelet)
		
		kubeadm reset 

		2.5) 初始化 master 節點
			kubeadm init --apiserver-advertise-address=192.168.1.5 --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.17.0 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --ignore-preflight-errors=all
			--apiserver-advertise-address: k8s 中的主要服務apiserver的部署地址,填自己的管理節點 ip
			--pod-network-cidr: 這個是 k8s 採用的節點網絡,因爲我們將要使用flannel作爲 k8s 的網絡,所以這裏填10.244.0.0/16就好
			--image-repository: 拉取的 docker 鏡像源,因爲初始化的時候kubeadm會去拉 k8s 的很多組件來進行部署,所以需要指定國內鏡像源,下不然會拉取不到鏡像。
			--kubernetes-version: 這個是用來指定你要部署的 k8s 版本的,一般不用填,不過如果初始化過程中出現了因爲版本不對導致的安裝錯誤的話,可以用這個參數手動指定。
			--ignore-preflight-errors: 忽略初始化時遇到的錯誤,比如說我想忽略 cpu 數量不夠 2 核引起的錯誤,就可以用--ignore-preflight-errors=CpuNum。錯誤名稱在初始化錯誤時會給出來。
			
		#查看 kubelet 日誌
			journalctl -xefu kubelet
		# 查看已加入的節點
			kubectl get nodes
		# 查看集羣狀態
			kubectl get cs
			get pod --all-namespaces
			
	**4) 部署 flannel 網絡**
		kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

	**5) 配置Node**
		5.1) 在node 節點上執行 2.1-2.4
		5.2) kubeadm join 192.168.1.5:6443 --token h7u22o.nk23ias5f1ft8hj9 --discovery-token-ca-cert-hash sha256:9f93785608c9a9de3e5d74e9ed30b8302691abfee7efd946a8c1b80d8582fe92
		
6)****使用 helm****
		wget https://storage.googleapis.com/kubernetes-helm/helm-v2.12.3-linux-amd64.tar.gz
		tar zxvf helm-v2.12.3-linux-amd64.tar.gz 
		cd linux-amd64/
		mv helm /usr/bin/
		helm version
	helm install --name nls --set nls.version=1.0 k8s.tar.gz
	ln -sf /var/run/resolvconf/resolv.conf /etc/resolv.conf
	apt-get  -y install upstart
	https://www.runoob.com/docker/docker-install-nginx.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章